trait为了解决php单继承的问题。行为可以动态增减功能。
trait优先顺序:当前类的方法 --覆盖--> trait的方法 --覆盖--> 被继承的方法
behavior优先顺序:当前类的方法 --覆盖--> 被继承的方法 --覆盖--> 行为的方法
行为behavior的优势:
1、行为类像普通类支持继承。另一方面,trait可以视为PHP语言支持的复制粘贴功能,它不支持继承。
2、行为无须修改组件类就可动态附加到组件或移除。要使用trait,必须修改使用它的类。
3、行为是可配置和可实例化,的而trait不能。
4、行为以响应事件来自定义组件的代码执行。
5、当不同行为附加到同一组件产生命名冲突时,这个冲突通过先附加行为的优先权自动解决。而由不同trait引发的命名冲突需要通过手工重命名冲突属性或方法来解决。
特性trait的优势:
1、traits比起行为更高效,因为行为是对象,消耗时间和内存。
2、IDE对trait更友好,因为它们是语言结构。
3、行为只能服务于组件类,而trait没有这个限制。
行为behavior | 特性trait | |
是否支持继承: | 是 | 否 |
是否动态加减: | 是 | 否 |
是否可配置/实例化: | 是 | 否 |
命名冲突是否可解: | 是 | 否 |
高效友好: | 否 | 是 |
是否有限制: | 否 | 是 |
综上:用行为、用行为、用行为。