Maison > développement back-end > Problème PHP > L'héritage php est-il unique ?

L'héritage php est-il unique ?

(*-*)浩
Libérer: 2023-02-25 14:46:02
original
2687 Les gens l'ont consulté

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.

L'héritage php est-il unique ?

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的方法...
Copier après la connexion

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();
Copier après la connexion

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!

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal