Deklarácia konštruktora v rozhraní v OOP v PHP
V rozhraní je možné deklarovať aj konštruktor
triedy. Pozrime sa na príklad. Povedzme, že sme sa rozhodli
vytvoriť triedu Rectangle, v ktorej
budú metódy na výpočet plochy, obvodu,
ako aj konštruktor, ktorý prijíma dva parametre.
Opíšme našu triedu pomocou rozhrania:
<?php
interface iRectangle
{
public function __construct($a, $b); // konštruktor s dvoma parametrami
public function getSquare();
public function getPerimeter();
}
?>
Napíšme implementáciu nášho rozhrania
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);
}
}
?>
Čo nám poskytla deklarácia konštruktora v rozhraní? Po prvé, nezabudneme implementovať konštruktor v triede. Po druhé, rozhranie explicitne určuje, že konštruktor triedy musí prijímať dva parametre: nie viac, nie menej. Toto nás tiež chráni pred náhodnou chybou.
Prečo sme vytvorili samostatné rozhranie iRectangle,
a nepridali sme konštruktor do rozhrania Figure?
Pretože všetky obrazce majú rôzny počet
strán a teda aj rôzny počet
parametrov v konštruktore. Preto sme museli
vytvoriť samostatné, konkrétnejšie rozhranie
špecificky pre obdĺžniky.
Vytvorte rozhranie iCube, ktoré
bude popisovať obrazec Kocka. Nech vaše rozhranie
popisuje konštruktor, ktorý ako parameter prijíma
stranu kocky, ako aj metódy na získanie
objemu kocky a plochy povrchu.
Vytvorte triedu Cube, ktorá implementuje rozhranie
iCube.
Vytvorte rozhranie iUser, ktoré
bude popisovať používateľa. Predpokladá sa, že
používateľ bude mať meno a vek a tieto polia budú
odovzdané ako parametre konštruktora. Nech
vaše rozhranie tiež určuje, že používateľ
bude mať gettery (ale nie settery) pre meno a
vek.
Vytvorte triedu User, ktorá implementuje rozhranie
iUser.