Interface : Mise en pratique 2
Dans cette mise en pratique nous allons voir comment déclarer et utiliser des Interfaces PHP
. Les interfaces sont un élément important de la programmation-objet, pour rappel les Interfaces sont des class abstraites (instanciation impossible):
- Va d'écrire un comportement.
- Définir les signatures des méthodes et propriétés
- Garantir au code qui fait l'appel que la méthode existera.
C'est donc un contrat que la class
doit respecter si elle implémente l'interface, si celle-ci implémente une Interface, elle devra forcément avoir l'ensemble des méthodes « décrite » dans l'interface.
Sommaire
Ressources disponibles :
Cas concret : L'interface Surface
Je vous propose d'illustrer les Interfaces avec le calcul d'une surface. Objectifs :
- Pratiquer les Interfaces.
- Création d'une Interface
IISurface
.- L'interface
IISurface
doit contenir une méthodepublic
nomméesurface()
celle-ci doit retourner unint
- L'interface
- Utiliser l'interface dans l'ensemble des
class
formes (Circle
,Square
, …).- Implémenter le code pour chaque « forme », celui-ci doit retourner la surface de chaque
forme
- Implémenter le code pour chaque « forme », celui-ci doit retourner la surface de chaque
- Valider que le code fonctionne.
Déclarer l'interface
La première étape est de créer l'interface en elle-même :
interface IISurface{
public function surface(): int;
}
Créer la class Circle
Nous avons maintenant notre Interface, celle-ci seule ne fait rien. Elle est abstraite, il faut donc créer des class
qui vont implements
cette Interface. Notre class permet le calcul de la surface ; je vous propose donc de créer une première class Circle
:
- Première étape, créer votre fichier PHP
Circle.class.php
. - Créer le code de votre class. Votre class doit implements IISurface
Je vous aide voilà le début de la classe
class Circle implements IISurface{
}
- Je vous laisse trouver les/la
propriété(s)
nécessaire au bon fonctionnement de laclass
. - Je vous laisse implémenter le code de la méthode
Surface
.
Code de la class (à ne regarder que si vous ne trouvez pas)
Avez-vous vraiment cherché ?
<?php
include_once("SurfaceInterface.php");
class Circle implements IISurface
{
private $r = 0;
public function __construct($r)
{
$this->r = $r;
}
public function surface(): int
{
// Je vous laisse écrire le code
}
}
Créer la class Square
En reprenant le principe de la class Circle, je vous laisse écrire le code de la class Square. Ici pas d'aide, mais comme dans le code précédent vous devez implémenter l'interface IISurface
- Première étape, créer votre fichier PHP
Square.class.php
. - Créer le code de votre class. Votre class doit implements IISurface
class Square implements IISurface{
}
- Je vous laisse trouver les/la
propriété(s)
nécessaire au bon fonctionnement de laclass
. - Je vous laisse implémenter le code de la méthode
Surface
.
Valider le fonctionnement
En utilisant le code suivant, je vous laisse valider le fonctionnement :
function calculateSurfaceOf($arr){
foreach ($arr as $a){
if($a instanceof IISurface) {
echo "La surface est de {$a->surface()}<br />";
} else {
echo "La class n'implémente pas l'interface « Surface »";
}
}
}
calculateSurfaceOf([new Circle(10), new Square(10)]);
- Utiliser ce code dans un nouveau fichier
index.php
. - Valider que la surface fonctionne.
Créer la class Rectangle
Même consigne que pour Circle et Square, je vous laisse travailler :
- Première étape, créer votre fichier PHP
Rectangle.class.php
. - Créer le code de votre class. Votre class doit implements IISurface
- L'ajouter dans la page de test
index.php
.