对于由单个开发人员构建的应用程序,php界面是多余的吗?

时间:2010-08-26 07:56:52

标签: php oop interface

我的问题是:PHP中的接口对于自己构建网站应用程序的开发人员真的很有用吗?是不是提供界面提供的所有东西的抽象类?

如果界面只是一个“合同”,开发人员是否意识到该类应该实现的内容?

我能想到的唯一一个好处就是一个类可以实现多个接口,但是当你知道一个类应该实现的所有内容时,这又是多么有用。你只是强迫自己实现这些方法。

正如你能弄清楚的那样,当我真正理解为什么界面有用时,我仍在等待那个A-HA时刻。

将它包装起来并简单化:我何时应该使用接口,为什么不使用抽象类?

6 个答案:

答案 0 :(得分:2)

仅仅因为你“知道”应该实施什么,并不意味着你会记住它。这并不意味着你永远不会犯错误而且输入错误的函数名称。编程中的“合同”不仅仅是让一个开发人员在另一个开发人员身上执行操作 - 他们还让您为代码提供一种刚性,以便能够捕获可能在雷达之下的错误。

答案 1 :(得分:1)

您可以使用

接口
  • 函数public function foo(IWhatever $x)
  • 中的类型提示
  • 检查类型$x instanceof IWhatever
  • 在单元测试$this->getMock('IWhatever')
  • 中创建模拟对象

当然,您也可以使用抽象类,但如果您实际上不需要定义任何代码,那么使用接口可能更好。

答案 2 :(得分:1)

“编程到接口而不是实现”GoF在他们的书Design Patterns: Elements of Reusable Object-Oriented Software中引入的原则。

在原则上引用Erich Gamma:

  

一旦只依赖于接口,就会与实现脱钩。这意味着实施可能会有所不同,这是一种健康的依赖关系。例如,出于测试目的,您可以使用轻量级模拟实现替换繁重的数据库实现。 [...]

     

因此,这种方法为您提供了灵活性,但它也将真正有价值的部分,设计与实现分开,从而使客户能够与实现分离。一个问题是你是否应该总是使用Java接口。抽象类也很好。事实上,抽象类在进化方面为您提供了更大的灵活性。您可以添加新行为而不会破坏客户端。 [...]

     

在Java中,当您向界面添加新方法时,您将破坏所有客户端。如果有抽象类,则可以添加新方法并在其中提供默认实现。所有客户都将继续工作。一如既往地存在权衡,接口为您提供基类的自由,抽象类使您可以自由地在以后添加新方法。并不总是可以在抽象类中定义接口,但是根据进化,您应该考虑抽象类是否足够。

Read the full interview here

因此,您可以使用接口抽象类。你只需要考虑权衡。 IMO,即使你一个人,也值得使用接口。您很少知道您的应用最终会看到什么。 The waterfall is a myth,因此您必须在开发过程中面对变化,并且接口可以更容易地接受它。

您可能也对以下内容感兴趣:

还有一些:

答案 3 :(得分:0)

接口是命令开发的一个很好的实践。它创造了程序产品的完整性。第一次团队在抽象类(使用常用方法和抽象方法)之后编写接口。

抽象类在我们在不同的类中扩展它时很有用。例如,方法__construct()对所有子类都是通用的,但其他方法则不同。

我们的团队使用此模型: 界面 - >摘要 - > Class1->等级2

Class1 extends Abstract implements Interface

Class2 extends Abstract implements Interface

答案 4 :(得分:0)

有一段时间以来,这被问到,但由于接口的功能似乎让很多人感到困惑 - 如果你来这里看,试试这里有超过500票的例子。我发现它真的很有帮助。

What does it mean to "program to an interface"?

答案 5 :(得分:-1)

  

我应该何时使用接口以及原因   而不是使用抽象类?

一旦使用例如工厂模式,就应该使用接口。我确定有更多的例子。

看看各种设计模式。 http://www.ibm.com/developerworks/library/os-php-designptrns/

编辑:将链接更改为更好的解释。