PHP通过接口强制属性

时间:2013-01-27 12:02:12

标签: php interface abstract-class

我在github上经常看到这个,我没有看到这些关系中的优点,甚至是使用接口。

情况:库有一个基类Article,它被声明为抽象的,应该被扩展。为什么它实现ArticleInterface基本上是:

interface ArticleInterface
{
     // some getter

     // some setter

     // getter...

     // setter....

     // etc...
}

我没有看到在此设置中使用Interface?抽象类本身并不足够,因为它已经定义了那些getters / setter 属性(它实现了接口)。这里唯一的接口是强制属性声明,它不应该是它的重点,对吗?

1 个答案:

答案 0 :(得分:3)

接口使类更加灵活。最后,它确实是您要定义的界面。抽象类允许您定义类接口的一些重要部分以及(某些)实现。接口更加抽象,仅定义必要功能的接口,并将实现完全留给实现者。

你应该这样考虑:接口是定义,抽象类只是它的一个示例实现。如果此骨架实现适合您的目的,请扩展它并使用它。否则,如果您不能或不想继承特定的类,您可以以任何方式实现该接口。您不必强制扩展特定的类,您可以使用自己的类层次结构。

有关为什么要在界面中思考以及为什么去耦非常重要的更多信息,您可能需要阅读this article