Dichiarazione del costruttore nell'interfaccia in OOP in PHP
Anche nell'interfaccia è possibile dichiarare il costruttore
della classe. Vediamo con un esempio. Supponiamo di aver deciso di
creare una classe Rectangle, in cui
ci saranno metodi per trovare l'area, il perimetro,
nonché un costruttore che accetta due parametri.
Descriviamo la nostra classe tramite un'interfaccia:
<?php
interface iRectangle
{
public function __construct($a, $b); // costruttore con due parametri
public function getSquare();
public function getPerimeter();
}
?>
Scriviamo l'implementazione della nostra interfaccia
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);
}
}
?>
Cosa ci ha dato la dichiarazione del costruttore nell'interfaccia? Innanzitutto, non dimenticheremo di implementare il costruttore nella classe. In secondo luogo, l'interfaccia indica esplicitamente che il costruttore della classe deve accettare due parametri: né di più, né di meno. Questo anche ci proteggerà da errori accidentali.
Perché abbiamo creato un'interfaccia separata iRectangle,
e non abbiamo aggiunto il costruttore nell'interfaccia Figure?
Perché tutte le figure hanno un numero diverso di
lati e, di conseguenza, un numero diverso di
parametri nel costruttore. Pertanto, abbiamo dovuto
creare un'interfaccia separata, più precisa
specificamente per i rettangoli.
Crea un'interfaccia iCube, che
descriverà la figura Cubo. Lascia che la tua interfaccia
descriva un costruttore, che accetta come parametro
il lato del cubo, così come i metodi per ottenere
il volume del cubo e l'area della superficie.
Crea una classe Cube, che implementa l'interfaccia
iCube.
Crea un'interfaccia iUser, che
descriverà un utente. Si presume che
l'utente abbia un nome e un'età e che questi campi
vengano passati come parametri del costruttore. Lascia che
la tua interfaccia specifichi anche che l'utente
avrà getter (ma non setter) per il nome e
l'età.
Crea una classe User, che implementa l'interfaccia
iUser.