php基础之Trait

2021年4月3日 作者 liuyizhi

Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method。Trait 和 Class 组合的语义定义了一种减少复杂性的方式,避免传统多继承和 Mixin 类相关典型问题。

优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法。 多个 trait 通过逗号分隔,在 use 声明列出多个 trait,可以都插入到一个类中。

多个trait间有方法名重复解决方法:使用insteadof 来指定使用哪个trait下对应的方法。

1234567891011121314151617181920212223242526272829class Base{public function sayHello(){echo 'Hello';}} trait SayWorld{public function sayHello(){parent::sayHello();echo 'World!';}} trait A {public function sayHello(){echo 'hello !';}} class MyHelloWorld extends Base {use SayWorld,A{A::sayHello insteadof  SayWorld;SayWorld::sayHello as talk;}} $objnew MyHelloWorld();echo $obj->sayHello();//hello !echo $obj->talk();// Hello World!