php5.4起,php实现了一种代码复用的方法,称为trait
trait是为PHP单继承准备的一种代码复用机制, trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用method。
从基类(父类)继承的成员会被trait插入的成员所覆盖,而trait中的成员又会被当前类成员覆盖。
使用use关键词使用trait,多个trait通过逗号分隔。如果两个trait都插入了一个同名方法,如果没有明确解决同名成员方法的冲突,程序将会长生一个致命错误。为了解决多个trait在同一个类中的命名冲突,需要使用insteadof操作符来明确指定使用冲突方法中的哪一个。也可以使用as操作符为某个方法引入别名,使用as还可以用来调整方法的访问控制(public/protected/private)。
trait也能够使用trait,在trait定义是通过使用一个或多个trait,能够组合其他trait中的部分或全部成员
为了对使用的类增加约束,trait支持抽象方法的使用
traits可以被静态成员静态方法定义
trait同样可以定义属性。trait 和 calss 7.0之前的版本不可定义相同的属性,7.0之后可定义相同名称的属性,但属性值必须完全相同