PHP OOP - Interfaces


PHP - Qu'est-ce que les Interfaces ?

Les interfaces vous permettent de spécifier quelles méthodes une classe doit implémenter.

Les interfaces facilitent l'utilisation d'une variété de classes différentes de la même manière. Lorsqu'une ou plusieurs classes utilisent la même interface, on parle de "polymorphisme".

Les interfaces sont déclarées avec le mot-clé interface :

Syntaxe

<?php
interface InterfaceName {
public function someMethod1();
public function someMethod2($name, $color);
public function someMethod3() : string;
}
?>

PHP - Interfaces vs. Classes Abstraites

Les interfaces sont similaires aux classes abstraites. La différence entre les interfaces et les classes abstraites est la suivante :

  • Les interfaces ne peuvent pas avoir de propriétés, tandis que les classes abstraites peuvent
  • Toutes les méthodes d'une interface doivent être publiques, tandis que les méthodes d'une classe abstraite peuvent être publiques ou protégées
  • Toutes les méthodes d'une interface sont abstraites, donc elles ne peuvent pas être implémentées dans le code et le mot-clé abstrait n'est pas nécessaire
  • Les classes peuvent implémenter une interface tout en héritant d'une autre classe en même temps


PHP - Utilisation des Interfaces

Pour implémenter une interface, une classe doit utiliser le mot-clé implements .

Une classe qui implémente une interface doit implémenter toutes les méthodes de l'interface.

Exemple

<?php
interface Animal {
public function makeSound();
}

class Cat implements Animal {
public function makeSound() {
echo "Meow";
}
}

$animal = new Cat();
$animal->makeSound();
?>
Essayez-le vous-même »

D'après l'exemple ci-dessus, disons que nous aimerions écrire un logiciel qui gère un groupe d'animaux. Il y a des actions que tous les animaux peuvent effectuer, mais chaque animal le fait à sa manière.

En utilisant des interfaces, nous pouvons écrire du code qui peut fonctionner pour tous les animaux, même si chacun se comporte différemment :

Exemple

<?php
// Définition de l'interface
interface Animal {
public function makeSound();
}

// Définitions des classes
class Cat implements Animal {
public function makeSound() {
echo " Meow ";
}
}

class Dog implements Animal {
public function makeSound() {
echo " Bark ";
}
}

class Mouse implements Animal {
public function makeSound() {
echo " Squeak ";
}
}

// Créer une liste d'animaux
$cat = new Cat();
$dog = new Dog();
$mouse = new Mouse();
$animals = array($cat, $dog, $mouse);

// Demander aux animaux de faire un son
foreach($animals as $animal) {
$animal->makeSound();
}
?>
Essayez-le vous-même »

Exemple Expliqué

Cat, Dog et Mouse sont toutes des classes qui implémentent l'interface Animal, ce qui signifie que toutes sont capables de faire un son en utilisant la méthode makeSound() . Grâce à cela, nous pouvons parcourir tous les animaux et leur demander de faire un son, même si nous ne savons pas quel type d'animal chacun est.

Puisque l'interface ne dit pas aux classes comment implémenter la méthode, chaque animal peut faire un son à sa manière.