Interfejsy w PHP

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 3931 razy

W PHP istnieje możliwość dziedziczenie jedynie po jednej klasie (nie ważne czy abstrakcyjnej czy nie). Z tego też względu wprowadzono możliwość tworzenia interfejsów, które mają na celu wymuszenie na każdej klasie z nimi związanej obsługę danego zestawu metod. Jedna klasa może dziedziczyć wiele interfejsów. Interfejsy tworzy się wykorzystując słowo kluczowe interface, natomiast dołącza się je do danej klasy za pomocą słowa kluczowego implements. Oto przykład interfejsu i klas z niego korzystających:

<?php interface iArea{ // interfejs wymuszający na obiektach go implementujących obsługę metod w nim zadeklarowanych public function getTop(); public function getBottom(); public function getLeft(); public function getRight(); } // Tworzenie klasy abstrakcyjnej figura abstract class Figure implements iArea{ // a tutaj implementacja interfejsu w klasie abstrakcyjnej Figure private static $nrOfFigures; // ta zmienna statyczna klasy będzie przechowywała liczbę aktualnie utworzonych figur geometrycznych protected $fillColor; protected $strokeColor; public static function getNrOfFigures(){ return self::$nrOfFigures; } private $figureName; public function __construct($fillColor = "#ffffff", $strokeColor = "#000000"){ self::$nrOfFigures ++; // tutaj zwiększam licznik utworzonych figur o 1 $this->fillColor = $fillColor; $this->strokeColor = $strokeColor; echo("<p>(Dodawanie) Aktualna liczba utworzonych figur geometrycznych: " . self::$nrOfFigures . "</p>"); } public function __destruct(){ self::$nrOfFigures --; // tutaj zminiejszam licznik utworzonych figur o 1 echo("<p>(Usuwanie) Aktualna liczba utworzonych figur geometrycznych: " . self::$nrOfFigures . "</p>"); } public function setFillColor($fillColor){ $this->fillColor = $fillColor; } public function setStrokeColor($strokeColor){ $this->strokeColor = $strokeColor; } public function getFillColor(){ return $this->fillColor; } public function getStrokeColor(){ return $this->strokeColor; } abstract public function draw(); // metoda abstrakcyjna rysuj abstract public function area(); // metoda abstrakcyjna pole powierzchni abstract public function circuit(); // metoda abstrakcyjna obwód } class Circle extends Figure{ protected $xc, $yc, $ray; public function __construct($xc, $yc, $ray, $name = "", $fillColor = "#ffffff", $strokeColor = "#000000"){ parent::__construct($fillColor, $strokeColor); $this->name = $name; $this->xc = $xc; $this->yc = $yc; $this->ray = $ray; } // obsługa metod interfejsu iArea public function getTop(){ return $this->yc - $this->ray; } public function getBottom(){ return $this->yc + $this->ray; } public function getLeft(){ return $this->xc - $this->ray; } public function getRight(){ return $this->yc + $this->ray; } public function draw(){ echo("<p>Koło: xc = " . $this->xc . "; yc = " . $this->yc . "; promień = " . $this->ray . "</p>"); } public function area(){ return pi() * $this->ray * $this->ray; } public function circuit(){ return pi() * 2 * $this->ray; } } class Rectangle extends Figure{ protected $x, $y, $width, $height; public function __construct($x, $y, $width, $height, $name = "", $fillColor = "#ffffff", $strokeColor = "#000000"){ parent::__construct($fillColor, $strokeColor); $this->name = $name; $this->x = $x; $this->y = $y; $this->width = $width; $this->height = $height; } // obsługa metod interfejsu iArea public function getTop(){ if($this->height > 0){ return $this->y; } return $this->y + $this->height; } public function getBottom(){ if($this->height > 0){ return $this->y + $this->height; } return $this->y; } public function getLeft(){ if($this->width > 0){ return $this->x; } return $this->x + $this->width; } public function getRight(){ if($this->width > 0){ return $this->x + $this->width; } return $this->x; } public function draw(){ echo("<p>Koło: x = " . $this->x . "; y = " . $this->y . "; szerokość = " . $this->width . "; wysokość = " . $this->height . "</p>"); } public function area(){ return pi() * $this->ray * $this->ray; } public function circuit(){ return pi() * 2 * $this->ray; } } ?>
Propozycje książek
tytuł: PHP i MySQL. Aplikacje internetowe po stronie serwera autor: Jon Duckett

Tytuł:

PHP i MySQL. Aplikacje internetowe po stronie serwera

Autor:

Jon Duckett

tytuł: PHP 8 i SQL. Programowanie dla początkujących w 43 lekcjach autor: Mariusz Duka

Tytuł:

PHP 8 i SQL. Programowanie dla początkujących w 43 lekcjach

Autor:

Mariusz Duka

tytuł: CodeIgniter 4. Zaawansowane tworzenie stron WWW w PHP autor: Łukasz Sosna

Tytuł:

CodeIgniter 4. Zaawansowane tworzenie stron WWW w PHP

Autor:

Łukasz Sosna

tytuł: PHP 7 MySQL 8 i Maria DB Praktyczny podręcznik autor: Steve Prettyman, Adrian W. West

Tytuł:

PHP 7 MySQL 8 i Maria DB Praktyczny podręcznik

Autor:

Steve Prettyman, Adrian W. West

tytuł: PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie V autor: Larry Ullman

Tytuł:

PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie V

Autor:

Larry Ullman

tytuł: PHP 7. Algorytmy i struktury danych autor: Mizanur Rahman

Tytuł:

PHP 7. Algorytmy i struktury danych

Autor:

Mizanur Rahman

tytuł: PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty. Wydanie V autor: Luke Welling, Laura Thomson

Tytuł:

PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty. Wydanie V

Autor:

Luke Welling, Laura Thomson

tytuł: PHP i jQuery. Techniki zaawansowane. Wydanie II autor: Keith Wald, Jason Lengstorf

Tytuł:

PHP i jQuery. Techniki zaawansowane. Wydanie II

Autor:

Keith Wald, Jason Lengstorf

tytuł: Laravel 4. Podstawy tworzenia aplikacji w PHP autor: Raphaël Saunier

Tytuł:

Laravel 4. Podstawy tworzenia aplikacji w PHP

Autor:

Raphaël Saunier

tytuł: Magento. Przewodnik dla programistów PHP autor: Allan MacGregor

Tytuł:

Magento. Przewodnik dla programistów PHP

Autor:

Allan MacGregor

W związku z tym, że firma Helion nie wywiązuje się z swoich zobowiązań naliczania prowizji za każdą zakupioną książkę a kontakt z ową frmą jest nie możliwy autor strony zmuszony został do zablokowania linkowania książek. Za wszelkie niedogodności z tym związane z góry przepraszam i obiecuję włączenie linkowania gdy tylko sprawa zostanie wyjaśniona