Trait同名
当两个Trait中含有同名的成员(属性或方法)时,可以进行替代或设置别名来完成调用。具体使用方法如下所示。
1 trait t1
2 {
3 public function eat()
4 {
5 echo 't1,eat';
6 }
7 }
8 trait t2
9 {
10 public function eat()
11 {
12 echo 't2,eat';
13 }
14 }
15 class Person
16 {
17 use t1,t2 {
18 t1::eat insteadof t2;
19 t2::eat as show;
20 }
21 }
22 $person = new Person();
23 $person->eat(); // 输出结果:t1,eat
24 $person->show(); // 输出结果:t2,eat
上述代码中,定义了两个Trait,分别为t1和t2。在Person类中引入Trait,由于两个Trait中有相同的方法,因此使用insteadof关键字将左边指定的Trait成员替代右侧中的Trait,as关键字用于为左侧的成员设置成右侧的别名。因此,当调用eat()方法时,实际执行t1中的eat()方法,调用show()方法时,实际执行T2中的eat()方法。