使用特征为接口定义功能的目的是什么

问题描述 投票:1回答:3

很抱歉,如果这是一个重复的问题或共同的设计原则,我已经四处搜寻,但找不到该问题的任何答案。我可能只是在搜索错误的关键字。

我一直在看一个流行的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
}

很抱歉,如果这是一个重复的问题或共同的设计原则,我已经四处搜寻,但找不到该问题的任何答案。我可能只是在搜索错误的关键字。我...

php inheritance interface traits
3个回答
1
投票

Per Sabre关于“集成到其他对象”的Event Emitter's docs


1
投票

0
投票

您基本上是在问两个问题。

© www.soinside.com 2019 - 2024. All rights reserved.