trait 为了减少单继承语言的限制,可以在不同层次结构内独立的类中复用类的方法集。
原型中方法同名
trait A1{
public function getInfo(){
echo "这是traint A原型<br/>";
}
}
trait B1{
public function getInfo(){
echo "床前明月光<br/>";
}
}
//使用原型
class Student2{
use A1,B1{
/*
//方法一:方法替换
//A1::getInfo insteadof B1;//将A1中的getInfo替换成B1中的getInfo
//B1::getInfo insteadof A1;//将B1中的getInfo替换成A1中的getInfo
*/
//方法二:改名
A1::getInfo insteadof B1;
B1::getinfo as show;//将B1的getinfo改名为show,必须加上面替换语句,不然会出错
}//引入多个train,同时解决名称冲突
}
$stu3=new Student2;
$stu3->getInfo();
$stu3->show();
还可以修改方法权限
trait A2{
private function show(){
echo "trait私有权限<br/>";
}
}
class Student3{
use A2{
//show as public;//将show方法权限设为public
show as public show2;//将show方法权限设为public 并改名为show2
}
}
$stu4=new Student3;
//$stu4->show();
$stu4->show2();