在使用PHP中的对象进行编码时,我总是很难理解接口的真正价值(可能是我想象的其他语言)
根据我的理解,您使用Interface
来强制或保证当一个类使用Interface
时,该类将具有在该类Interface
内定义的方法
因此,根据我对使用它们的小知识,这并不意味着在定义需要这些方法的超过1个类时,您只会发现Interface
有益吗?
更清楚的是,如果我有一个类做了一件事而没有其他类需要做那样的事情,那么在该类上使用Interface
是没有意义的吗?
所以你不会在每个课上使用Interface
吗?
PS)如果您将此问题投票为exact duplicate
,那么您没有阅读问题而只阅读标题,因为我已经阅读了大部分类似问题
答案 0 :(得分:12)
根据我的理解,您使用界面来强制执行或保证 当一个类使用一个接口时,该类将拥有该接口 在该类的接口内定义的方法。
这实际上只是交易的一半(技术部分)。还有一些非常重要的架构一半,当您使用界面时会出现这样的一半:
function feed(IAnimal $interface) {
// ...
}
(或者,"工厂"记录为返回实现IAnimal
的实例的函数也可作为示例。)
这里的想法是界面的消费者说:"我想让动物喂食。我不在乎它是飞行,散步还是爬行。我不在乎它是大还是小。我只关心它与所有其他动物共享一些特征" - 包含界面定义的功能。
换句话说,接口用于从具体实现(类)中抽象合同(接口)。这使得具体类的实现者可以自由地修改,重命名,删除和添加实现,而不会破坏接口用户的代码,如果您直接在API中引用具体类,这是不可能的。
至于仅由一个类实现的接口:没有足够的信息来决定。如果将来可能有更多的接口实现,那么它确实有意义(例如:即使IHashFunction
当前,Sha1HashFunction
接口也会有意义唯一可用的实现)。否则它没有提供任何东西。