Maison >développement back-end >tutoriel php >Comment simuler l'héritage multiple en php
Cet article présente principalement comment implémenter l'héritage multiple simulé en php, qui a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer
PHP n'a pas la fonctionnalité d'héritage multiple. Même dans un langage de programmation prenant en charge l’héritage multiple, nous utilisons rarement cette fonctionnalité. De l’avis de la plupart des gens, l’héritage multiple n’est pas une bonne méthode de conception. Si vous souhaitez ajouter des fonctionnalités supplémentaires à une classe, vous n'avez pas nécessairement besoin d'utiliser l'héritage. Ici, je propose une méthode pour simuler l’héritage multiple pour référence.
PHP a une méthode magique appelée __call. Lorsque vous appelez une méthode qui n'existe pas, cette méthode sera automatiquement appelée . A ce stade, nous avons la possibilité de rediriger l’appel vers une méthode existante. Pour les sous-classes qui héritent de plusieurs classes parent, le processus de recherche de méthodes est généralement le suivant :
sa propre méthode -> méthode de la classe parent 1 -> 🎜>Le processus de simulation est à peu près le suivant :
Instanciez chaque classe parent puis utilisez-la comme attribut de la sous-classe. Ces classes parentes fournissent des méthodes publiques.Lorsqu'une sous-classe possède une méthode, la fonction __call() ne sera pas appelée. Cela équivaut à « remplacer » la méthode de la classe parent. Lorsqu'une méthode qui n'existe pas est appelée, la méthode __call() est utilisée pour rechercher les méthodes qui peuvent être appelées à leur tour depuis la classe parent. Bien qu'il ne s'agisse pas d'un héritage multiple complet, cela peut nous aider à résoudre le problème.
Il n'y a pas d'héritage de propriétés en cause, mais ce n'est pas difficile à mettre en œuvre. L'héritage de propriété peut être simulé via les méthodes magiques __set() et __get(). Veuillez le pratiquer vous-même.1 <?php 2 class Parent1 { 3 function method1() {} 4 function method2() {} 5 } 6 class Parent2 { 7 function method3() {} 8 function method4() {} 9 } 10 class Child { 11 protected $_parents = array(); 12 public function Child(array $parents=array()) { 13 $_parents = $parents; 14 } 15 16 public function __call($method, $args) { 17 // 从“父类"中查找方法 18 foreach ($this->_parents as $p) { 19 if (is_callable(array($p, $method))) { 20 return call_user_func_array(array($p, $method), $args); 21 } 22 } 23 // 恢复默认的行为,会引发一个方法不存在的致命错误 24 return call_user_func_array(array($this, $method), $args); 25 } 26 } 27 $obj = new Child(array(new Parent1(), new Parent2())); 28 $obj->method1(); 29 $obj->method3();
Autres méthodes : implémentez l'héritage multiple via des interfaces
Les classes en php ne peuvent hériter que d'une seule classe parent. Si vous souhaitez hériter de plusieurs classes, vous devez utiliser des interfaces
interface pour. simuler plusieurs héritages
3. Explication détaillée de l'héritage multiple dans l'interface PHP
et peuvent hériter d'une ou plusieurs interfaces. Bien sûr, l'héritage d'interface utilise également le mot-clé extends . Si vous souhaitez plusieurs héritages, utilisez simplement des virgules pour séparer les interfaces héritées. Il convient de noter que lorsque votre interface hérite d'autres interfaces,
hérite directement des attributs de constante statique et des méthodes abstraites de l'interface parent, donc la classe doit implémenter toutes les abstractions pertinentes lorsque implémentant la méthode d'interface . Vous avez maintenant une certaine compréhension de l'héritage des interfaces PHP. L'exemple suivant est pour référence. Le code est le suivant :
Le résultat de l'exécution du code est le suivant :<?php interface father{ function shuchu(); } interface fam extends father{ function cook($name); } class test implements fam{ function shuchu(){ echo "接口继承,要实现两个抽象方法"; echo "<br>"; } function cook($name){ echo "平时经常做饭的人是:".$name; } } $t=new test(); $t->shuchu(); $t->cook("妈妈"); ?>L'exemple ci-dessus est que l'interface hérite d'une interface, donc lorsque la classe de test implémente l'interface fam, elle doit instancier deux méthodes abstraites, c'est-à-dire instancier à la fois la méthode abstraite de la sous-classe de l'interface et la classe parent.
接口继承,要实现两个抽象方法 平时经常做饭的人是:妈妈 |
Regardons un exemple d'héritage multiple d'interface. Le code est le suivant :
Exemple de résultats d'exécution :<?php interface father{ function shuchu(); } interface mother{ function dayin($my); } interface fam extends father,mother{ function cook($name); } class test implements fam{ function dayin($my){ echo "我的名字是:".$my; echo "<br>"; } function shuchu(){ echo "接口继承,要实现两个抽象方法"; echo "<br>"; } function cook($name){ echo "平时经常做饭的人是:".$name; } } $t=new test(); $t->shuchu(); $t->dayin("小强"); $t->cook("妈妈"); ?>Ce code hérite de deux interfaces Pour. interfaces, toutes les méthodes abstraites de ces trois classes abstraites doivent être instanciées pour toutes les instances. Il y en a trois au total. Après avoir lu ces deux exemples, vous devriez être familier avec l'héritage d'interface. En fait, il existe un héritage simple et un héritage multiple, à condition que toutes les méthodes abstraites pertinentes soient implémentées.
接口继承,要实现两个抽象方法 我的名字是:小强 平时经常做饭的人是:妈妈 |
Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !
Recommandations associées :
Prétraitement de mysqli en PHP préparerIntroduction initiale à la programmation multi-processus PHPCompréhension du polymorphisme 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!