我一直在阅读有关PHP的特征。具体来说,我遇到了this文章。他们提出了一个涉及需要实现可共享接口的对象的示例。提出以下论点:
在实现可共享接口的每个类中复制share()方法是否有意义?
没有
有一个AbstractShare类是否有意义实现Shareable接口的对象扩展?
没有
将share()方法作为AbstractEntity类的一部分实现,然后阻塞为Message对象是否有意义?
没有
实现满足接口契约的ShareableTrait是否有意义,因此可以轻松添加到需要它的对象中?
是!
我能理解第一点和第三点。但第二个让我感到困惑。有一个名为AbstractShareable
的抽象类或类似的东西,包含分享某些东西,然后从中扩展的功能,究竟出了什么问题?
答案 0 :(得分:0)
接口专门用于创建可靠,良好的接口,独立于实现类。含义:
function (Shareable $sharable) {
$shareable->share();
}
由于您的接口声明,您可以放心,此代码将始终有效(任何传入的对象都使用share()
方法)。
您可以使用类层次结构实现相同的功能;即如果您需要某个班级,您可以确定其所有孩子也将拥有父母所拥有的相同方法。但是:这会对您的类强加严格的类层次结构。所有类都必须扩展一个特定的基类。他们只能 扩展一个特定的类。例如,您无法为AbstractSharable
和AbstractLoggable
使用类层次结构。这就是为什么类层次结构解决方案太不灵活了。它只会让你实现一个“特质”。或者你必须将所有各种“特征”混合到同一个基类中。然后你有一个巨大的单片基类。
将特征分成小的单独界面可使您的代码简单灵活。 Traits提供了与接口规范类似的灵活实现。