2011-12-18 50 views
8

我一直有一个困难时期,在PHP对象编码时(可能是其他语言我想象)当使用接口在PHP

从我了解你理解接口的实际价值,使用Interface强制执行或者保证当某个类正在使用Interface时该类将具有在该类内的Interface中定义的方法。

因此,从我使用它们的小知识来看,这并不意味着当定义需要这些方法的多于一个类时,才会发现Interface有利吗?

要更清楚一点,如果我有一个班级做了一件事,而其他班级不需要做那样的事情,那么在该班级上使用Interface将毫无意义?

所以你不会在每个课堂上使用Interface你对吗?

PS)如果你投这个问题为exact duplicate,那么你没读过的问题,只有我读过大部分类似的问题标题已经

+2

这可能对您的情况很有意思:http://stackoverflow.com/questions/20463/what-is-the-point-of-interfaces-in-php – Quasdunk 2011-12-18 14:53:07

+3

是的,如果您的界面没有任何好处知道这只会是一个单一的实现。 – 2011-12-18 14:56:06

+0

@Quasdunk这是关于这个话题的更好的阅读之一,谢谢 – JasonDavis 2011-12-18 15:04:24

回答

10

据我了解您使用的接口强制或保证 当一个类正在使用一个接口,该类将在该类的接口中定义 方法。

这实际上只是交易的一半(技术部分)。还有所有重要的建筑一半,当你消耗的界面出现,它是这样的:

function feed(IAnimal $interface) { 
    // ... 
} 

(或者说是记录了“工厂”函数返回一个实现IAnimal将一个实例也作为例子)。

这里的想法是,界面的使用者说:“我想要一只动物喂食,我不在乎它是否飞行,走路或爬行,我不在乎它是大还是小。只关心它与所有其他动物共享某些功能“ - 这些功能将构成界面的定义。

换句话说,接口用于从具体的实现(类)抽象契约(接口)。这使得具体类的实现者可以自由地修改,重命名,删除和添加实现,而不会为接口的用户破坏代码,如果您直接在API中引用具体类,那么这是不可能的。

至于仅由一个类实现的接口:没有足够的信息来决定。如果未来可能会有更多的接口实现,那么它肯定是有意义的(例如:即使Sha1HashFunction当前唯一可用的实现,接口也是有意义的。否则它不提供任何东西。

+0

感谢您花时间回答这个问题,我知道这个问题似乎是散布在所以但许多答案并不是那么好。 – JasonDavis 2011-12-18 15:01:06

+0

@jasondavis:不幸的是,这是一个问题...并且谢谢。 – Jon 2011-12-18 15:05:41

+1

我想到插头和插座。要使用插座,你必须知道如何设计你的插头在插座上工作(例如三根插头,但有很多种,包括适配器),但是一旦插头离开墙壁,你会怎么做?直到设备。从三个(或两个为我的跨池塘朋友)叉插头出来的品种很多,但在它的根源,它仍然是一个三叉装置。抽象类可以被看作是硬件连接到系统(联网烟雾探测器)的东西,但在功能上也有些独立。 – 2011-12-18 15:15:50