Maison >développement back-end >tutoriel php >Explication détaillée du cas de substitution PHP Liskov
Cette fois je vais vous apporter une explication détaillée du cas de remplacement de PHP Richter Quelles sont les précautions pour le remplacement de PHP Richter Voici un cas pratique, jetons un oeil.
Principe de substitution de Liskov
Le principe de substitution de Liskov nous dit que dans un logiciel, remplacez un objet de classe de base par Pour ses objets de sous-classe, le programme ne générera aucune erreur ni exception. L'inverse n'est pas vrai. Si une entité logicielle utilise un objet de sous-classe, elle ne pourra pas nécessairement utiliser l'objet de classe de base. Le principe de substitution de Liskov est l'un des moyens importants d'implémenter le principe d'ouverture et de fermeture. Étant donné que les objets de sous-classe peuvent être utilisés partout où des objets de classe de base sont utilisés, essayez d'utiliser le type de classe de base pour définir l'objet dans le programme et le déterminer au moment de l'exécution. Son type de sous-classe remplace l'objet de classe parent par l'objet de sous-classe.
Lorsque vous utilisez le principe de substitution Liskov, vous devez noter que toutes les méthodes de la sous-classe doivent être déclarées dans la classe parent, ou que la sous-classe doit implémenter toutes les méthodes déclarées dans la classe parent. Essayez de concevoir la classe parent comme une classe ou une interface abstraite, laissez la sous-classe hériter de la classe parent ou implémenter l'interface parent et implémentez les méthodes déclarées dans la classe parent au moment de l'exécution, l'instance de sous-classe remplace l'instance de classe parent, et nous. peut facilement étendre la fonction système et il n'est pas nécessaire de modifier le code de la sous-classe d'origine. L'ajout de nouvelles fonctions peut être réalisé en ajoutant une nouvelle sous-classe.
Comprendre à travers un morceau de code
<?php //例子1 class Bird{ protect function fly(){ } } //翠鸟 class KingFisher extends Bird{ } //鸵鸟 class Ostrich extends Bird{ //鸵鸟不会飞啊 } //例子2 class A{ protect function add($a, $b){ return $a + $b; } } //重载 class B extends A{ protected function add($a, $b){ return $a + $b + 100; } } ?>
Le principe de substitution de Liskov est une contrainte sur l'héritage de classe. Il existe deux interprétations du principe de substitution de Liskov :
1 Vous ne pouvez pas simplement hériter de classes inappropriées avec des méthodes ou des attributs redondants. (Exemple 1)
2. Les sous-classes peuvent étendre les fonctions de la classe parent, mais ne peuvent pas modifier les fonctions d'origine de la classe parent. (Exemple 2)
Le principe de substitution de Liskov contient les significations cachées suivantes :
① Une sous-classe peut implémenter la méthode abstraite de la classe parent, mais ne peut pas remplacer la classe parent méthodes non abstraites de la classe.
② Les sous-classes peuvent ajouter leurs propres méthodes uniques.
③ Lorsque la méthode d'une sous-classe remplace la méthode de la classe parent, les conditions préalables de la méthode (c'est-à-dire les paramètres formels de la méthode) sont plus souples que les paramètres d'entrée du parent méthode de classe.
④ Lorsqu'une méthode d'une sous-classe implémente une méthode abstraite d'une classe parent, les postconditions de la méthode (c'est-à-dire la valeur de retour de la méthode) sont plus strictes que celles de la classe parent.
Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !
Lecture recommandée :
Installation de l'outil de mise en cache PHP XCache et analyse des cas d'utilisation
Comment PHP empêche-t-il l'écriture répétée simultanée
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!