1、使用trait和use结合可以在php中实现多继承;
2、对于继承的优先级,trait的类高于class的类;
3、命名冲突,通过insteadof来指定替换;
4、命名冲突,通过as来更换名称,类似别名;
例子:
<?php
trait A{
public function func1(){
return "A:func1";
}
public function func2(){
return "A:func2";
}
}
trait B{
public function func1(){
return "B:func1";
}
public function func2(){
return "B:func2";
}
public function func3(){
return "B:func3";
}
}
class C{
public function func1(){
return "C:func1";
}
public function func2(){
return "C:func2";
}
public function func3(){
return "C:func3";
}
}
class K extends C{
use A,B{
A::func2 insteadof B;
B::func1 insteadof A;
A::func1 as method_A1;
B::func2 as method_B2;
}
public function ToDo(){
return "ToDo";
}
}
echo (new K)->func1();
echo "<br>";
echo (new K)->func2();
echo "<br>";
echo (new K)->method_A1();
echo "<br>";
echo (new K)->method_B2();
echo "<br>";
echo (new K)->func3();
echo "<br>";
echo (new K)->ToDo();
?>
输出结果: