Declaratie van de constructor in de interface in OOP in PHP
In een interface kan ook de constructor van een
klasse worden gedeclareerd. Laten we een voorbeeld bekijken.
Stel dat we besloten hebben om een klasse Rectangle te maken,
die methodes bevat voor het vinden van de oppervlakte, de omtrek,
en ook een constructor die twee parameters accepteert.
Laten we onze klasse beschrijven met behulp van een interface:
<?php
interface iRectangle
{
public function __construct($a, $b); // constructor met twee parameters
public function getSquare();
public function getPerimeter();
}
?>
Laten we de implementatie van onze interface
iRectangle schrijven:
<?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);
}
}
?>
Wat heeft de declaratie van de constructor in de interface ons opgeleverd? Ten eerste zullen we niet vergeten om de constructor in de klasse te implementeren. Ten tweede geeft de interface expliciet aan dat de constructor van de klasse twee parameters moet accepteren: niet meer en niet minder. Dit beschermt ons ook tegen een onbedoelde fout.
Waarom hebben we een aparte interface iRectangle gemaakt,
en niet de constructor toegevoegd aan de interface Figure?
Omdat alle figuren een verschillend aantal zijden hebben
en, dienovereenkomstig, een verschillend aantal
parameters in de constructor. Daarom moesten we
een aparte, meer precieze interface maken
specifiek voor rechthoeken.
Maak een interface iCube, die
de figuur Kubus beschrijft. Laat je interface
een constructor beschrijven, die de zijde van de kubus als parameter accepteert,
evenals methodes voor het verkrijgen van
het volume van de kubus en de oppervlakte.
Maak een klasse Cube, die de interface
iCube implementeert.
Maak een interface iUser, die
een gebruiker beschrijft. Er wordt aangenomen dat
de gebruiker een naam en leeftijd heeft en dat deze velden
als parameters aan de constructor worden doorgegeven. Laat
je interface ook specificeren dat de gebruiker
getters (maar geen setters) voor de naam en
leeftijd zal hebben.
Maak een klasse User, die de interface
iUser implementeert.