最近在使用Laravel中发现好多 Trait的使用 感觉很有意思
由于php是单继承的语言 无法同时继承多个基类 但是可以使用Trait
通过 Trait 可以很方便的实现代码的复用 类似继承的效果
Trait 不能实例化
示例一
|
|
以上输出结果
|
|
从上面结果可以看出如果使用use
关键字引入了一个trait
就会拥有它里面的所有属性和方法 包括私有 保护的 可以直接使用
如果需要引入多个Trait
可以使用逗号隔开
|
|
示例二
|
|
输出结果
|
|
这个比较有意思了,当类中和基类和trait
中存在同名的方法时候 当前类的方法会覆盖基类覆盖 Trait,而同时Trait中的会覆盖基类 这种情况同样适用于变量
示例三
|
|
当适用的多个Trait中含有重名的方法时候会报错
|
|
网上给出的解决办法 适用 insteadof
和as
来解决 insteadof
的作用是使用前面的方法代替后面另外一个方法 而as
的作用是给方法取个别名
|
|
上面这个输出结果1234insteadof 那一句的作用就是使用Test1中的sayHello方法替代Test里的sayHello方法as 那一句的作用就是直接给Test2中的sayHello方法取了个别名叫 test2sayhellotest1 say hellotest2 say hello