很抱歉,如果这是一个重复的问题或共同的设计原则,我已经四处搜寻,但找不到该问题的任何答案。我可能只是在搜索错误的关键字。
我一直在看一个流行的Sabre / Event库(https://sabre.io/event/),并且在代码中有一个我试图理解的简单类/继承模型:
类EventEmitter实现EventEmitterInterface并使用EventEmitterTrait(请参见下面的代码)。>>
在类上方的EventEmitterTrait中有一条注释说:
* Using the trait + interface allows you to add EventEmitter capabilities * without having to change your base-class.
我试图理解为什么此注释如此说明,以及为什么它允许在不更改基类的情况下添加功能,以及与仅将例程放入EventEmitter本身有何不同。
您难道不只是扩展EventEmitter并在派生类中添加功能吗?
简化代码:
// EventEmitter.php
class EventEmitter implements EventEmitterInterface {
use EventEmitterTrait;
}
// EventEmitterInterface.php
interface EventEmitterInterface {
// ... declares several function prototypes
}
// EventEmitterTrait.php
trait EventEmitterTrait {
// ... implements the routines declared in EventEmitterInterface
}
很抱歉,如果这是一个重复的问题或共同的设计原则,我已经四处搜寻,但找不到该问题的任何答案。我可能只是在搜索错误的关键字。我...