Deklarace konstruktoru v rozhraní v OOP v PHP
V rozhraní lze také deklarovat konstruktor
třídy. Podívejme se na příklad. Předpokládejme, že jsme se rozhodli
vytvořit třídu Rectangle, která
bude mít metody pro výpočet plochy, obvodu,
a také konstruktor přijímající dva parametry.
Pojďme popsat naši třídu pomocí rozhraní:
<?php
interface iRectangle
{
public function __construct($a, $b); // konstruktor se dvěma parametry
public function getSquare();
public function getPerimeter();
}
?>
Pojďme napsat implementaci našeho rozhraní
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 nám přinesla deklarace konstruktoru v rozhraní? Zaprvé, nezapomeneme implementovat konstruktor v třídě. Zadruhé, rozhraní explicitně určuje, že konstruktor třídy musí přijímat dva parametry: ani více, ani méně. To nás také ochrání před náhodnou chybou.
Proč jsme vytvořili samostatné rozhraní iRectangle,
a nepřidali konstruktor do rozhraní Figure?
Protože všechny obrazce mají různý počet
stran a tedy i různý počet
parametrů v konstruktoru. Proto jsme museli
vytvořit samostatné, přesnější rozhraní
konkrétně pro obdélníky.
Vytvořte rozhraní iCube, které
bude popisovat obrazec Krychle. Nechť vaše rozhraní
popisuje konstruktor, který jako parametr přijímá
stranu krychle, a také metody pro získání
objemu krychle a plochy povrchu.
Vytvořte třídu Cube, která implementuje rozhraní
iCube.
Vytvořte rozhraní iUser, které
bude popisovat uživatele. Předpokládá se, že
uživatel bude mít jméno a věk a tato pole budou
předána parametry konstruktoru. Nechť
vaše rozhraní také určuje, že uživatel
bude mít gettery (ale ne settery) pro jméno a
věk.
Vytvořte třídu User, která implementuje rozhraní
iUser.