Deklaracja konstruktora w interfejsie w OOP w PHP
W interfejsie również można zadeklarować konstruktor
klasy. Spójrzmy na przykład. Załóżmy, że postanowiliśmy
utworzyć klasę Rectangle, w której
będą metody do znajdowania pola powierzchni, obwodu,
a także konstruktor przyjmujący dwa parametry.
Opiszmy naszą klasę za pomocą interfejsu:
<?php
interface iRectangle
{
public function __construct($a, $b); // konstruktor z dwoma parametrami
public function getSquare();
public function getPerimeter();
}
?>
Napiszmy implementację naszego interfejsu
iRectangle:
<?php
class Rectangle implements iRectangle
{
private $a;
private $b;
public function __construct($a, $b)
{
$this->a = $a;
$this->b = $b;
}
public function getSquare()
{
return $this->a * $this->b;
}
public function getPerimeter()
{
return 2 * ($this->a + $this->b);
}
}
?>
Co dało nam zadeklarowanie konstruktora w interfejsie? Po pierwsze, nie zapomnimy zaimplementować konstruktora w klasie. Po drugie, interfejs wyraźnie wskazuje, że konstruktor klasy musi przyjmować dwa parametry: ani więcej, ani mniej. To również zabezpieczy nas przed przypadkowym błędem.
Dlaczego utworzyliśmy osobny interfejs iRectangle,
a nie dodaliśmy konstruktora do interfejsu Figure?
Ponieważ wszystkie figury mają różną liczbę
boków i, odpowiednio, różną liczbę
parametrów w konstruktorze. Dlatego musieliśmy
utworzyć osobny, bardziej precyzyjny interfejs
konkretnie dla prostokątów.
Utwórz interfejs iCube, który
będzie opisywał figurę Sześcian. Niech twój interfejs
opisuje konstruktor, przyjmujący parametrem
bok sześcianu, a także metody do uzyskiwania
objętości sześcianu i pola powierzchni.
Utwórz klasę Cube, implementującą interfejs
iCube.
Utwórz interfejs iUser, który
będzie opisywał użytkownika. Zakłada się, że
użytkownik będzie miał imię i wiek, a te pola będą
przekazywane parametrami konstruktora. Niech
twój interfejs również określa, że użytkownik
będzie miał gettery (ale nie settery) dla imienia i
wieku.
Utwórz klasę User, implementującą interfejs
iUser.