En effet, l'interface PHP a sa utilité.
Ce sont des contrats, des manuels d'instructions pour d'autres développeurs. Cependant, il est encore difficile de comprendre à quoi sert l’interface.
Basic
Interface est une classe abstraite qui ne peut pas être directement instanciée, mais peut être implémentée.
Ceci est un exemple de base
interface MyInterface { public function setName(string $name); public function getName(); } class MyClass implements MyInterface { private $name; public function setName(string $name) { $this->name = $name; } public function getName() { return $this->name; } }
MyClass
doit implémenter les méthodes setName()
et getName()
. Si vous ne le faites pas, vous obtiendrez une erreur fatale.
Erreur fatale : La classe MyClass contient 2 méthodes abstraites et doit donc être déclarée abstraite ou implémenter les méthodes restantes (MyInterface::setName, MyInterface::getName)
De plus, les méthodes définies dans l'interface L'accessibilité doit être publique et les membres de la classe ne peuvent pas être définis dans l'interface.
Cause
Les développeurs utilisent des interfaces pour décrire le comportement courant d'une classe ou d'un groupe de classes.
Mais pourquoi est-il uniquement responsable de l'encapsulation de l'implémentation et non responsable de la gestion des détails de chaque classe ?
Pour le découplage ! L'interface
vous permet de modifier l'implémentation sans changer les détails, c'est-à-dire la façon dont vous utilisez cette implémentation.
Exemples plus avancés
Tout système de mise en cache nécessite la fonctionnalité suivante
Sur cette base, nous pouvons créer l'interface de cache suivante
interface CacheInterface { public function set(string $key, $val); public function get(string $key); public function delete(string $key); }
De cette façon, les développeurs peuvent savoir qu'ils doivent implémenter l'interface de cache. Nous n'avons pas besoin de savoir comment l'implémenter. Le résultat est que nous pouvons facilement changer de système de cache sans changer la façon dont il est utilisé
Par conséquent, il est facile de changer de système de cache sans changer la façon dont le système de cache est utilisé dans le projet.
Exemple Symfony
Regardons l'application spécifique de l'exemple tout à l'heure. Pour Symfony, si vous souhaitez implémenter un système de mise en cache, la meilleure pratique est de le faire comme suit
use Symfony\Contracts\Cache\CacheInterface; class MyClass { private $cache; public function __construct(CacheInterface $cache) { $this->cache = $cache; } }
Injecter l'interface de cache dans notre classe via l'injection de dépendances. La prochaine fois que nous modifierons le système de cache, la classe MyClass n'aura pas besoin d'apporter de modifications.
Implémentations multiples VS héritage multiple
PHP ne prend pas en charge l'héritage multiple, la méthode suivante est impossible
class MyClass extends ClassX, ClassY {}
Une partie de la raison pour laquelle cela n'est pas autorisé est à cause du problème Diamond
Cependant, vous pouvez le faire
class ClassY extends ClassX {} class MyClass extends ClassY {}
mais ClassX
et ClassY
peuvent gérer des choses différentes, donc utiliser l'héritage. cela n'a aucun sens.
Si vous souhaitez effectuer plusieurs comportements, vous pouvez avoir plusieurs interfaces
class MyClass implements InterfaceX, InterfaceY {}
En d'autres termes, vous pouvez demander à certaines classes de partager certaines fonctionnalités au lieu de partager une classe parent.
Résumé
L'interface PHP est un modèle de méthode d'une classe, ce qui est très utile pour une implémentation et une utilisation découplées.
Cette fonctionnalité est particulièrement utile lorsque vous devez maintenir la flexibilité et vous assurer que tous les développeurs suivent un ensemble de règles.
[Recommandations de didacticiel associées : "Tutoriel PHP"]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!