Konstruktoriaus deklaravimas interfeise OOP PHP
Interfeise taip pat galima deklaruoti klasės
konstruktorių. Pažiūrėkime pavyzdžiu. Tarkime, nusprendėme
sukurti klasę Rectangle, kurioje
bus metodai plotui ir perimetrui rasti,
taip pat konstruktorius, priimantis du parametrus.
Apibūdinkime savo klasę naudodami interfeisą:
<?php
interface iRectangle
{
public function __construct($a, $b); // konstruktorius su dviem parametrais
public function getSquare();
public function getPerimeter();
}
?>
Sukurkime mūsų interfeiso iRectangle
implementaciją:
<?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);
}
}
?>
Ką mums davė konstruktoriaus deklaravimas interfeise? Pirma, nepamiršime implementuoti konstruktoriaus klasėje. Antra, interfeisas aiškiai nurodo, kad klasės konstruktorius turi priimti du parametrus: ne daugiau, ne mažiau. Tai taip pat apsaugo mus nuo atsitiktinės klaidos.
Kodėl mes sukūrėme atskirą interfeisą iRectangle,
o ne pridėjome konstruktorių prie interfeiso Figure?
Nes visos figūros turi skirtingą skaičių
kraštinių ir atitinkamai skirtingą skaičių
parametrų konstruktoriuje. Todėl mes turėjome
sukurti atskirą, tikslesnį interfeisą
konkrečiai stačiakampiams.
Sukurkite interfeisą iCube, kuris
apibūdins figūrą Kubas. Tegul jūsų interfeisas
apibūdina konstruktorių, parametru priimantį
kubo kraštinę, taip pat metodus kubio tūriui
ir paviršiaus plotui gauti.
Sukurkite klasę Cube, implementuojančią interfeisą
iCube.
Sukurkite interfeisą iUser, kuris
apibūdins vartotoją. Daroma prielaida, kad
vartotojas turės vardą ir amžių, ir šie laukai bus
perduodami konstruktoriaus parametrais. Tegul
jūsų interfeisas taip pat nurodo, kad vartotojas
turės getter'ius (bet ne setter'ius) vardui ir
amžiui.
Sukurkite klasę User, implementuojančią interfeisą
iUser.