PHP中的Traits有哪些可能的使用场景?

时间:2012-02-29 07:54:35

标签: php oop traits

  

可能重复:
  traits in php – any real world examples/best practices?

在什么样的情况下,人们会在PHP中使用Traits?我对此有一个非常好的总体想法,但我似乎无法想到在我编写的应用程序中使用它们的方法,但这可能是因为它当时不需要特征。

我已经意识到需要特征的一种情况:

  • 事件。而不是让一个类实现观察者模式并让所有其他类继承它,只需使它成为一个特征,让那些想要触发事件或订阅的类使用特征。例如,Yii框架通过在CComponent类实现东西而不是使用Trait来做错了。

基本上可以在类之间共享但可能在多个类层次结构中传播的功能应该使用特征。还有哪些场景可以利用Traits而不是事件系统?

1 个答案:

答案 0 :(得分:-4)

Traits地址的问题类似于Java使用接口解决的问题 - 如何在不属于同一类层次结构的类之间强制执行常见行为(由接口表示)。

对于只有继承的C ++等语言,对于需要相同行为的同一上下文中两个不同类的两个对象,这两个类必须来自同一层次结构。这有时意味着创建非常人为的层次结构只是为了允许来自不同类的对象在同一个上下文中使用。

Java通过接口解决了这个问题 - 接口本质上是一个控制行为提供的契约,因此一个类的对象可以替换单独类的对象,因为它承诺相同的行为 - 接口。但它们不必来自同一层次结构。

PHP Traits体现了这个想法。特征是一种接口,是一个类包含的一组行为,因此它可以在需要该行为的上下文中使用。因此,任何Java接口示例都应该延续到PHP Traits示例。 PHP Traits与Java接口有点不同,因为Traits可以包含完整的函数定义,而Java接口只能包含声明(典型的PHP特性!)