Deklaration af konstruktør i interface i OOP i PHP
I et interface kan man også deklarere en konstruktør
klasse. Lad os se på et eksempel. Lad os sige, at vi besluttede at
oprette en klasse Rectangle, hvor
der vil være metoder til at finde areal, omkreds,
samt en konstruktør, der accepterer to parametre.
Lad os beskrive vores klasse ved hjælp af et interface:
<?php
interface iRectangle
{
public function __construct($a, $b); // konstruktør med to parametre
public function getSquare();
public function getPerimeter();
}
?>
Lad os skrive implementeringen af vores interface
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);
}
}
?>
Hvad gav deklarationen af konstruktøren i interfacet os? For det første glemmer vi ikke at implementere konstruktøren i klassen. For det andet angiver interfacet eksplicit, at klassens konstruktør skal acceptere to parametre: ikke mere, ikke mindre. Dette beskytter os også mod utilsigtede fejl.
Hvorfor oprettede vi et separat interface iRectangle,
og ikke tilføjede konstruktøren til interfacet Figure?
Fordi alle figurer har et forskelligt antal
sider og følgelig et forskelligt antal
parametre i deres konstruktør. Derfor var vi nødt til at
oprette et separat, mere præcist interface
specifikt for rektangler.
Lav et interface iCube, som
vil beskrive figuren Terning. Lad dit interface
beskrive en konstruktør, der som parameter accepterer
terningens side, samt metoder til at opnå
terningens rumfang og overfladeareal.
Lav en klasse Cube, der implementerer interfacet
iCube.
Lav et interface iUser, som
vil beskrive en bruger. Det forventes, at
brugeren har et navn og en alder, og at disse felter vil blive
overført som parametre til konstruktøren. Lad
dit interface også specificere, at brugeren
vil have gettere (men ikke settere) for navn og
alder.
Lav en klasse User, der implementerer interfacet
iUser.