Déclaration du constructeur dans l'interface en POO en PHP
Dans une interface, il est également possible de déclarer le constructeur
d'une classe. Regardons un exemple. Supposons que nous ayons décidé de
créer une classe Rectangle, qui
contiendra des méthodes pour trouver l'aire, le périmètre,
ainsi qu'un constructeur acceptant deux paramètres.
Décrivons notre classe à l'aide d'une interface :
<?php
interface iRectangle
{
public function __construct($a, $b); // constructeur avec deux paramètres
public function getSquare();
public function getPerimeter();
}
?>
Écrivons l'implémentation de notre 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);
}
}
?>
Qu'est-ce que la déclaration du constructeur dans l'interface nous a apporté ? Premièrement, nous n'oublierons pas d'implémenter le constructeur dans la classe. Deuxièmement, l'interface indique explicitement que le constructeur de la classe doit accepter deux paramètres : ni plus, ni moins. Cela nous protège également d'une erreur accidentelle.
Pourquoi avons-nous créé une interface séparée iRectangle,
au lieu d'ajouter le constructeur à l'interface Figure ?
Parce que toutes les figures ont un nombre différent de
côtés et, par conséquent, un nombre différent de
paramètres dans le constructeur. C'est pourquoi nous avons dû
créer une interface distincte, plus précise,
spécifiquement pour les rectangles.
Créez une interface iCube, qui
décrira la figure du Cube. Que votre interface
déscrive un constructeur, prenant en paramètre le
côté du cube, ainsi que des méthodes pour obtenir
le volume du cube et l'aire de sa surface.
Créez une classe Cube, implémentant l'interface
iCube.
Créez une interface iUser, qui
décrira un utilisateur. On suppose que
l'utilisateur aura un nom et un âge et que ces champs seront
transmis en paramètres du constructeur. Que
votre interface spécifie également que l'utilisateur
aura des getters (mais pas des setters) pour le nom et
l'âge.
Créez une classe User, implémentant l'interface
iUser.