Konstruktori deklareerimine liideses OOP-s PHP-s
Liideses saab samuti deklareerida klassi
konstruktori. Vaatame näidet. Oletame, et otsustasime
teha klassi Rectangle, kus on
meetodid pindala ja perimeetri leidmiseks,
samuti konstruktor, mis võtab vastu kaks parameetrit.
Kirjeldame oma klassi liidese abil:
<?php
interface iRectangle
{
public function __construct($a, $b); // konstruktor kahe parameetriga
public function getSquare();
public function getPerimeter();
}
?>
Kirjutame oma liidese iRectangle
realisatsiooni:
<?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);
}
}
?>
Mida andis meile konstruktori deklareerimine liideses? Esiteks, me ei unusta realisida konstruktorit klassis. Teiseks, liides näitab selgelt, et klassi konstruktor peab võtma vastu kaks parameetrit: mitte rohkem ega vähem. See ka kaitseb meid juhusiku vea eest.
Miks me lõime eraldi liidese iRectangle,
mitte ei lisanud konstruktorit liidesesse Figure?
Sest kõigil kujunditel on erinev arv
külgi ja vastavalt erinev arv
parameetreid konstruktoris. Seetõttu pidime me
looma eraldi, täpsema liidese
spetsiaalselt ristkülikute jaoks.
Tehke liides iCube, mis
kirjeldab kujundit Kuup. Olgu teie liides
kirjeldab konstruktorit, mis parameetrina võtab vastu
kuubi külje, ning meetodeid
kuubi ruumala ja pindala saamiseks.
Tehke klass Cube, mis realiseerib liidest
iCube.
Tehke liides iUser, mis
kirjeldab kasutajat. Eeldatakse, et
kasutajal on nimi ja vanus ning need väljad
antakse edasi konstruktori parameetritena. Olgu
teie liides määrab ka selle, et
kasutajal on getterid (aga mitte setterid) nime ja
vanuse jaoks.
Tehke klass User, mis realiseerib liidest
iUser.