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,'_extends')) { $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==='_extends') { 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(".'$a'.");"); } } } header('content-type:text/html;charset=utf-8'); class a{ public $a=5; public function say_name(){ echo '我叫'.$this->name.'<br>'; } } class b{ function say_age(){ echo '我今年'.$this->age.'岁<br>'; } } class c extends multi_extends{ public $_extends=array('a','b'); public function say_hellow(){ echo 'hellow '.$this->name.'<br>'; } } class d{ function say_goodbye(){ echo 'goodbye '.$this->name.'<br>'; } } class persion extends multi_extends{ public $_extends=array('c','d'); public $name="熊宝山"; public $age="20"; } //执行继承后的方法 $o=new persion(); $o->say_name(); $o->say_age(); $o->say_hellow(); $o->say_goodbye();
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!