何时在PHP中使用特征是否合适?

时间:2015-01-15 07:54:39

标签: php oop traits

我一直在阅读有关PHP的特征。具体来说,我遇到了this文章。他们提出了一个涉及需要实现可共享接口的对象的示例。提出以下论点:

  

在实现可共享接口的每个类中复制share()方法是否有意义?

     

没有

     

有一个AbstractShare类是否有意义实现Shareable接口的对象扩展?

     

没有

     

将share()方法作为AbstractEntity类的一部分实现,然后阻塞为Message对象是否有意义?

     

没有

     

实现满足接口契约的ShareableTrait是否有意义,因此可以轻松添加到需要它的对象中?

     

是!

我能理解第一点和第三点。但第二个让我感到困惑。有一个名为AbstractShareable的抽象类或类似的东西,包含分享某些东西,然后从中扩展的功能,究竟出了什么问题?

1 个答案:

答案 0 :(得分:0)

接口专门用于创建可靠,良好的接口,独立于实现类。含义:

function (Shareable $sharable) {
    $shareable->share();
}

由于您的接口声明,您可以放心,此代码将始终有效(任何传入的对象都使用share()方法)。

您可以使用类层次结构实现相同的功能;即如果您需要某个班级,您可以确定其所有孩子也将拥有父母所拥有的相同方法。但是:这会对您的类强加严格的类层次结构。所有类都必须扩展一个特定的基类。他们只能 扩展一个特定的类。例如,您无法为AbstractSharableAbstractLoggable使用类层次结构。这就是为什么类层次结构解决方案太不灵活了。它只会让你实现一个“特质”。或者你必须将所有各种“特征”混合到同一个基类中。然后你有一个巨大的单片基类。

将特征分成小的单独界面可使您的代码简单灵活。 Traits提供了与接口规范类似的灵活实现。