PHP基础:trait方法命名冲突解决方案及修改访问控制
1.trait组合的同名方法命名冲突的解决方案
1.1指定默认执行(替代方式)
1.2给不同的组件方法起别名
// 组件1
trait t1
{
public function tfun()
{
return __TRAIT__ . ' 组件中的方法 ' . __METHOD__;
}
}
// 组件2
trait t2
{
public function tfun()
{
return __TRAIT__ . ' 组件中的方法 ' . __METHOD__;
}
}
// 组件3(引入组件1和组件2)
// 利用指定默认执行方法和别名的方式解决命名冲突
trait t3
{
use t1, t2 {
// 1. 替代(指定默认执行t1组件中的tfun方法,也可理解为用t1组件中的方法替代t2组件中的同名方法)
t1::tfun insteadOf t2;
// 2. 别名
t2::tfun as td2;
}
}
class jobClass{
use t3;
}
$job=new jobClass;
echo $job->tfun(),'<hr>';
echo $job->td2(),'<hr>';
2.修改trait方法的访问控制
用as关键字修改trait方法的访问控制
trait t4{
// as: 还可以修改trait成员的访问控制
use t1 {tfun as private td1;}
}
class jobClass{
use t4;
}
$job=new jobClass;
// echo $job->td1(),'<hr>';