Deklarasjon av konstruktør i grensesnitt i OOP i PHP
I et grensesnitt kan man også deklarere en konstruktør
for klassen. La oss se på et eksempel. La oss si at vi bestemte oss for
å lage en klasse Rectangle, der
det vil være metoder for å finne areal, omkrets,
og også en konstruktør som tar imot to parametere.
La oss beskrive klassen vår ved hjelp av et grensesnitt:
<?php
interface iRectangle
{
public function __construct($a, $b); // konstruktør med to parametere
public function getSquare();
public function getPerimeter();
}
?>
La oss skrive en implementasjon av grensesnittet vårt
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);
}
}
?>
Hva ga oss deklarasjonen av konstruktøren i grensesnittet? For det første vil vi ikke glemme å implementere konstruktøren i klassen. For det andre indikerer grensesnittet eksplisitt at klassens konstruktør må ta imot to parametere: verken flere eller færre. Dette beskytter oss også mot utilsiktede feil.
Hvorfor lagde vi et eget grensesnitt iRectangle,
i stedet for å legge til konstruktøren i grensesnittet Figure?
Fordi alle figurer har forskjellig antall
sider og følgelig forskjellig antall
parametere i konstruktøren. Derfor måtte vi
lage et eget, mer presist grensesnitt
spesifikt for rektangler.
Lag et grensesnitt iCube som
vil beskrive figuren Kube. La grensesnittet ditt
beskrive en konstruktør som tar imot
kubens side som parameter, i tillegg til metoder for å få
volumet av kuben og overflatearealet.
Lag en klasse Cube som implementerer grensesnittet
iCube.
Lag et grensesnitt iUser som
vil beskrive en bruker. Det antas at
brukeren vil ha et navn og en alder, og at disse feltene vil
bli sendt som parametere til konstruktøren. La
grensesnittet ditt også spesifisere at
brukeren vil ha gettere (men ikke settere) for navn og
alder.
Lag en klasse User som implementerer grensesnittet
iUser.