Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method。Trait 和 Class 组合的语义定义了一种减少复杂性的方式,避免传统多继承和 Mixin 类相关典型问题。
优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法。 多个 trait 通过逗号分隔,在 use 声明列出多个 trait,可以都插入到一个类中。
多个trait间有方法名重复解决方法:使用insteadof 来指定使用哪个trait下对应的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | class 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; } } $obj = new MyHelloWorld(); echo $obj ->sayHello(); //hello ! echo $obj ->talk(); // Hello World! |
友情提示:垃圾评论一律封号...