Comment utiliser des méthodes sans traits pour implémenter l'héritage multiple dans les versions antérieures à php5.4

PHP中文网
Libérer: 2023-03-15 15:18:02
original
1540 Les gens l'ont consulté

Les langages comme PHP et Java ne prennent en charge que l'héritage unique, mais parfois j'ai besoin d'utiliser l'héritage multiple. Bien sûr, les traits après php5.4 peuvent également mieux résoudre la question de l'héritage multiple.

Ci-dessous, nous expliquons comment utiliser des méthodes sans traits pour implémenter plusieurs fonctions d'héritage

Ce code a été testé par moi et est disponible pour référence.

Le code est. comme suit :

<?php
/*
多继承基类
注:要想实现类多继承,必需首先继承此基类
*/
        
class multi_extends{
        
        public function __construct(){
                $this->_init_extends();
        }
        
        protected function _init_extends(){
                if(property_exists($this,&#39;_extends&#39;))
                {
                        $extends=&$this->_extends;
                        foreach($extends as $class)
                        {
                                $this->_extends($class);
                        }
                }
        }
        
        public function _extends($class_name){
                //分析目标
                $ref = new ReflectionClass($class_name);
                
                //继承公共属性
                $property_list=$ref->getProperties(ReflectionProperty::IS_PUBLIC);
                foreach($property_list as $property)
                {
                        $property_name=$property->name;
                        $property_value=$property->getValue(new $class_name);
                        if($property_name===&#39;_extends&#39;)
                        {
                                foreach($property_value as $c)
                                {
                                        $this->_extends[]=$c;
                                }
                        }else{
                                if(!property_exists($this,$property_name))
                                {
                                        $this->{$property->name}=$property_value;
                                }
                        }
                }
                
                //继承公共方法
                $method_list=$ref->getMethods(ReflectionMethod::IS_PUBLIC);
                foreach($method_list as $method)
                {
                        $this->_extends_method[$method->name]=$method->class;
                }
        }
        
        function __call($m,$a){
                if($c=$this->_extends_method[$m])
                {
                        eval("$c::$m(".&#39;$a&#39;.");");
                }
        }
}
header(&#39;content-type:text/html;charset=utf-8&#39;);
class a{
        public $a=5;
        
        public function say_name(){
                echo &#39;我叫&#39;.$this->name.&#39;<br>&#39;;
        }
}
class b{
        function say_age(){
                echo &#39;我今年&#39;.$this->age.&#39;岁<br>&#39;;
        }
        
}
class c extends multi_extends{
        public $_extends=array(&#39;a&#39;,&#39;b&#39;);
        
        
        public function say_hellow(){
                echo &#39;hellow &#39;.$this->name.&#39;<br>&#39;;
        }
}
class d{
        function say_goodbye(){
                echo &#39;goodbye &#39;.$this->name.&#39;<br>&#39;;
        }
        
}
class persion extends multi_extends{
        public $_extends=array(&#39;c&#39;,&#39;d&#39;);
        
        
        public $name="熊宝山";
        public $age="20";
        
        
        
}
//执行继承后的方法
$o=new persion();
$o->say_name();
$o->say_age();
$o->say_hellow();
$o->say_goodbye();
Copier après la connexion

Ce qui précède est la fonction de la classe d'héritage multiple php implémentée par moi. Le code est destiné à l'apprentissage uniquement. Veuillez utiliser la fonction de trait de php5.4 dans les projets formels.

Adresse de l'article : http://www.php.cn/php-weizijiaocheng-377482.html

Apprenez la programmation sur le site PHP chinois www.php.cn

~~~~

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:
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