PHP n'a pas plusieurs fonctionnalités d'héritage. 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'êtes pas obligé 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 appelée automatiquement.
À 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 parents, le processus de recherche de méthodes est généralement le suivant : (Apprentissage recommandé : Tutoriel vidéo PHP)
本身的方法 -> 父类1的方法 -> 父类2的方法...
Le processus de simulation est à peu près le suivant : ajoutez chaque parent instance de classe, puis en tant qu'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, recherche les méthodes qui peuvent être appelées tour à tour depuis la classe parent via la méthode __call(). Bien qu'il ne s'agisse pas d'un héritage multiple complet, cela peut nous aider à résoudre le problème.
<?php class Parent1 { function method1() {} function method2() {} } class Parent2 { function method3() {} function method4() {} } class Child { protected $_parents = array(); public function Child(array $parents=array()) { $_parents = $parents; } public function __call($method, $args) { // 从“父类"中查找方法 foreach ($this->_parents as $p) { if (is_callable(array($p, $method))) { return call_user_func_array(array($p, $method), $args); } } // 恢复默认的行为,会引发一个方法不存在的致命错误 return call_user_func_array(array($this, $method), $args); } } $obj = new Child(array(new Parent1(), new Parent2())); $obj->method1(); $obj->method3();
Il n'y a pas d'héritage des propriétés impliquées, 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().
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!