Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie Nicht-Trait-Methoden, um Mehrfachvererbung in Versionen vor PHP5.4 zu implementieren

So verwenden Sie Nicht-Trait-Methoden, um Mehrfachvererbung in Versionen vor PHP5.4 zu implementieren

PHP中文网
PHP中文网Original
2017-08-26 10:13:391529Durchsuche

Sprachen wie PHP und Java unterstützen nur die Einzelvererbung, aber manchmal muss ich die Mehrfachvererbung verwenden. Natürlich können Merkmale nach PHP5.4 auch die Mehrfachvererbung besser lösen.

Im Folgenden stellen wir vor, wie man Nicht-Trait-Methoden verwendet, um mehrere Vererbungsfunktionen zu implementieren.

Dieser Code wurde von mir getestet und steht als Referenz zur Verfügung wie folgt:


Das Obige ist die von mir implementierte Funktion der PHP-Mehrfachvererbung. Der Code dient nur zum Lernen. Bitte verwenden Sie die Trait-Funktion von PHP5.4 in formalen Projekten.
<?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();

Artikeladresse: http://www.php.cn/php-weizijiaocheng-377482.html

Lernen Sie Programmieren auf der chinesischen PHP-Website

www.php.cn


~~~~

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Nicht-Trait-Methoden, um Mehrfachvererbung in Versionen vor PHP5.4 zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn