Deklaracija konstruktorja v vmesniku v OOP v PHP
V vmesniku je mogoče tudi deklarirati konstruktor
razreda. Poglejmo si na primeru. Recimo, da smo se odločili
narediti razred Rectangle, v katerem
bojo metode za iskanje površine, obsega,
pa tudi konstruktor, ki sprejme dva parametra.
Opišimo naš razred z vmesnikom:
<?php
interface iRectangle
{
public function __construct($a, $b); // konstruktor z dvema parametroma
public function getSquare();
public function getPerimeter();
}
?>
Napišimo implementacijo našega vmesnika
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);
}
}
?>
Kaj nam je dala deklaracija konstruktorja v vmesniku? Prvič, ne bomo pozabili implementirati konstruktorja v razredu. Drugič, vmesnik eksplicitno določa, da mora konstruktor razreda sprejeti dva parametra: niti več, niti manj. To nas tudi ščiti pred naključno napako.
Zakaj smo ustvarili ločen vmesnik iRectangle,
namesto da bi dodali konstruktor v vmesnik Figure?
Ker imajo vse figure različno število
stran in s tem različno število
parametrov v konstruktorju. Zato smo morali
ustvariti ločen, natančnejši vmesnik
natančno za pravokotnike.
Naredite vmesnik iCube, ki
bo opisoval figuro Kocka. Naj vaš vmesnik
opiše konstruktor, ki kot parameter sprejme
stran kocke, ter metode za pridobitev
prostornine kocke in površine.
Naredite razred Cube, ki implementira vmesnik
iCube.
Naredite vmesnik iUser, ki
bo opisoval uporabnika. Predvideva se, da
ima uporabnik ime in starost in da bosta ti polji
posredovani kot parametri konstruktorja. Naj
vaš vmesnik določa tudi, da bo uporabnik
imel getterje (ne pa setterjev) za ime in
starost.
Naredite razred User, ki implementira vmesnik
iUser.