抱歉,如果这是一个重复的问题或一个共同的设计原则,我已经搜索了一下,但无法找到这个问题的任何答案。我可能只是用错误的关键字搜索。
我一直在看一个流行的库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
}
Qyouu
湖上湖
慕的地6264312
慕田峪9158850