php多继承问题

多继承

php 本身是不支持多继承的

因为多继承容易引起菱形问题

php可以通过其他方式实现多继承

  • __call

    class Parent1 {
     function method1() {}
     function method2() {}``
    }
    class Parent2 {
     function method3() {}
     function method4() {}
    }
    class Child {
     protected $_parents = array();
     public function Child(array $parents=array()) {
         $this->_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()));
    print_r( array($obj) );die;
    $obj->method1();
    $obj->method3();
    
  • 多接口

interface testA{   
    function echostr();   
}    
interface testB extends testA{   
    function dancing($name);   
}    
class testC implements testB{   
  
    function echostr(){   
        echo "接口继承,要实现所有相关抽象方法!";   
        echo "<br>";   
    }    
  
    function dancing($name){   
        echo $name."正在跳舞!";    
    }    
}    
$demo=new testC();   
$demo->echostr();   
$demo->dancing("模特"); 
posted @ 2020-02-22 11:04  周瑜已被使用  阅读(12)  评论(0)    收藏  举报  来源