2010-08-26 42 views
6

我的问题是:在PHP中,接口对于自行构建网站应用程序的开发人员真的有用吗?抽象类不是提供接口提供的所有功能吗?由单个开发人员构建的应用程序是否是一个php接口冗余?

如果一个接口只是一个“契约”,是不是开发人员意识到类应该实现的东西?

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

正如你可以看出,我仍然在等待那个A-HA时刻,当我真正理解为什么一个接口是有用的。

简单来说:什么时候应该使用接口?为什么不使用抽象类呢?

回答

2

只因为你“知道”什么东西应该实现,并不意味着你记得它。这并不意味着你永远不会犯一个错误,并打错了一个函数名。编程中的“契约”不仅仅是一个开发人员在另一个开发人员身上执行的事情 - 他们还可以让你提供一个可以捕捉错误的代码的僵化程度。

+0

你能提供一个例子吗? – danidacar 2010-08-26 08:25:22

-1

什么时候应该使用接口以及为什么 不使用抽象类?

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

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

编辑:改变链接到更好的解释。

+0

我不认为你提到的文章非常好=) – 2010-08-26 08:07:03

+1

TBH我没有读它,我用从斯蒂芬·施密特的PHP设计模式书。 – Rufinus 2010-08-26 08:22:02

+0

PHP和设计模式是我开始这个问题的原因。大多数与php相关的设计模式教程并不是真正关键的。 – danidacar 2010-08-26 08:28:03

1

可以使用接口在功能

  • 型提示public function foo(IWhatever $x)
  • 要检查$x instanceof IWhatever
  • 要在单位创建模拟对象测试$this->getMock('IWhatever')

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

0

接口是命令开发中非常好的练习。它创建了程序产品的完整性。第一次团队在抽象类(使用通用方法和抽象方法)之后编写接口。

抽象类有用,我们将它扩展到不同的类中。例如,方法__construct()对于所有子类都是公共的,但其他方法是不同的。

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

Class1 extends Abstract implements Interface 

Class2 extends Abstract implements Interface 
+0

这个问题涉及单个开发者。对于一个团队,我可以理解你的方法。 – danidacar 2010-08-26 08:27:04

1

“面向接口编程,而不是实现”是在他们的著作中GoF推出了原则Design Patterns: Elements of Reusable Object-Oriented Software

在圣多美和普林西比引用埃里希·伽玛:

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

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

在Java中,当您向接口添加新方法时,会破坏所有客户端。当你有一个抽象类时,你可以添加一个新的方法并在其中提供一个默认的实现。所有的客户将继续工作。一如既往有一个折衷,一个接口让你可以自由地处理基类,一个抽象类可以让你随后自由地添加新的方法。在抽象类中定义接口并不总是可能的,但从进化的角度来看,您应该考虑抽象类是否足够。

Read the full interview here

所以,你可以用一个接口一个抽象类。你只需要考虑权衡。国际海事组织,即使你是孤身一人,也值得使用接口。你很少知道你的应用最终会看到什么。 The waterfall is a myth,所以你将不得不在开发和接口过程中面对变化,使它更容易拥抱它。

您还可能有兴趣

和一些更多:

+0

面向接口编程,而不是在PHP的实现是不是真的直线前进,因为PHP是弱类型 – danidacar 2010-08-26 08:24:26

+0

我读GOF和一堆其他的书。你能否更重要? – danidacar 2010-08-26 08:25:58

+0

@daniphp(http://stackoverflow.com/questions/2758254/what-is-the-point-of-interfaces-in-a-weakly-typed-language-like- [这样的说法不时出现] PHP)。 PHP只是* weakly *键入。它不是无类型的。 – Gordon 2010-08-26 08:32:42

相关问题