Deklarimi i konstruktorit në ndërfaqe në OOP në PHP
Në ndërfaqe gjithashtu mund të deklarohet konstruktor
i klasës. Le të shohim me një shembull. Le të supozojmë se kemi vendosur të
bëjmë një klasë Rectangle, në të cilën
do të ketë metoda për gjetjen e sipërfaqes, perimetrit,
si dhe një konstruktor, i cili pranon dy parametra.
Le të përshkruajmë klasën tonë duke përdorur ndërfaqen:
<?php
interface iRectangle
{
public function __construct($a, $b); // konstruktor me dy parametra
public function getSquare();
public function getPerimeter();
}
?>
Le të shkruajmë implementimin e ndërfaqes sonë
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);
}
}
?>
Çfarë na dha deklarimi i konstruktorit në ndërfaqe? Së pari, ne nuk do të harrojmë të implementojmë konstruktorin në klasë. Së dyti, ndërfaqja tregon në mënyrë eksplicite, që konstruktori i klasës duhet të pranojë dy parametra: as më shumë, as më pak. Kjo gjithashtu na mbron nga gabimet e rastësishme.
Pse krijuam një ndërfaqe të veçantë iRectangle,
në vend që të shtonim konstruktorin në ndërfaqen Figure?
Sepse të gjitha figurat kanë numër të ndryshëm
brinjësh dhe, në përputhje me rrethanat, numër të ndryshëm
parametrash në konstruktor. Prandaj, ne u desh të
krijonim një ndërfaqe të veçantë, më të saktë
posaçërisht për drejtkëndëshat.
Bëni një ndërfaqe iCube, e cila
do të përshkruajë figurën Kub. Le të ndërfaqja juaj
të përshkruajë konstruktorin, i cili si parametër pranon
brinjën e kubit, si dhe metodat për marrjen
e vëllimit të kubit dhe sipërfaqes anësore.
Bëni një klasë Cube, e cila implementon ndërfaqen
iCube.
Bëni një ndërfaqe iUser, e cila
do të përshkruajë përdoruesin. Supozohet se
përdoruesi ka emër dhe moshë dhe këto fusha do të
kalojnë si parametra të konstruktorit. Le të
ndërfaqja juaj gjithashtu përcaktojë që përdoruesi
të ketë metoda get (por jo set) për emrin dhe
moshën.
Bëni një klasë User, e cila implementon ndërfaqen
iUser.