我的问题是:PHP中的接口对于自己构建网站应用程序的开发人员真的很有用吗?是不是提供界面提供的所有东西的抽象类?
如果界面只是一个“合同”,开发人员是否意识到该类应该实现的内容?
我能想到的唯一一个好处就是一个类可以实现多个接口,但是当你知道一个类应该实现的所有内容时,这又是多么有用。你只是强迫自己实现这些方法。
正如你能弄清楚的那样,当我真正理解为什么界面有用时,我仍在等待那个A-HA时刻。
将它包装起来并简单化:我何时应该使用接口,为什么不使用抽象类?
答案 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中,当您向界面添加新方法时,您将破坏所有客户端。如果有抽象类,则可以添加新方法并在其中提供默认实现。所有客户都将继续工作。一如既往地存在权衡,接口为您提供基类的自由,抽象类使您可以自由地在以后添加新方法。并不总是可以在抽象类中定义接口,但是根据进化,您应该考虑抽象类是否足够。
因此,您可以使用接口或抽象类。你只需要考虑权衡。 IMO,即使你一个人,也值得使用接口。您很少知道您的应用最终会看到什么。 The waterfall is a myth,因此您必须在开发过程中面对变化,并且接口可以更容易地接受它。
您可能也对以下内容感兴趣:
还有一些:
答案 3 :(得分:0)
接口是命令开发的一个很好的实践。它创造了程序产品的完整性。第一次团队在抽象类(使用常用方法和抽象方法)之后编写接口。
抽象类在我们在不同的类中扩展它时很有用。例如,方法__construct()对所有子类都是通用的,但其他方法则不同。
我们的团队使用此模型: 界面 - >摘要 - > Class1->等级2
Class1 extends Abstract implements Interface
Class2 extends Abstract implements Interface
答案 4 :(得分:0)
有一段时间以来,这被问到,但由于接口的功能似乎让很多人感到困惑 - 如果你来这里看,试试这里有超过500票的例子。我发现它真的很有帮助。
答案 5 :(得分:-1)
我应该何时使用接口以及原因 而不是使用抽象类?
一旦使用例如工厂模式,就应该使用接口。我确定有更多的例子。
看看各种设计模式。 http://www.ibm.com/developerworks/library/os-php-designptrns/
编辑:将链接更改为更好的解释。