php - 何时在 PHP 中使用接口(interface)

标签 php oop interface

在用 PHP 中的对象(可能是我想象的其他语言)进行编码时,我一直很难理解接口(interface)的真正值(value)

据我了解,您使用 Interface 来强制或保证当一个类使用 Interface 时,该类将具有 中定义的方法该类内部的接口(interface)

因此,根据我对使用它们的了解,这是否意味着在定义多个需要这些方法的类时,您只会发现 Interface 有用?

更清楚地说,如果我有一个类只做一件事而没有其他类需要做那种事,那么在该类上使用 Interface 就没有意义了吗?

所以您不会在每个类上都使用 Interface,对吗?

PS) 如果您将此问题投票为 exact duplicate 那么您没有阅读问题而只阅读了标题,因为我已经阅读了大部分类似的问题

最佳答案

From what I understand you use an Interface to enforce or guarantee that when a Class is using an Interface that that class will have the methods defined in the Interface inside of that class.

这实际上只是交易的一半(技术部分)。还有最重要的架构部分,它在您使用界面时出现,它是这样的:

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

(或者,记录为返回实现 IAnimal 的实例的“工厂”函数也可以作为示例)。

这里的想法是界面的消费者说:“我想要一只动物来喂食。我不在乎它是飞的、走的还是爬的。我不在乎它是大还是小。我只注意它与所有其他动物共享一些特征”——构成界面定义的特征。

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

至于仅由一个类实现的接口(interface):信息不足以决定。如果将来可能有更多接口(interface)的实现,那么它确实有意义(例如:即使 Sha1HashFunction目前唯一可用的实现)。否则它不会提供任何东西。

关于php - 何时在 PHP 中使用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8552505/

相关文章:

php - 如何使用 PHP 的 OpenSSL 模块更改私钥的密码?

php - php 中的正则表达式搜索具有给定模式的 url

php - 当前 Unix 时间戳的长度可以大于 10 位吗

java - 从Java中的另一个对象获取空值,但在自己的类中获取值

php - 关于在何处放置全局辅助函数的 OOP/MVC 建议

c++ - 与模板 C++ 的接口(interface)

php - 通过单个查询获得类别和子类别

node.js - Typescript:在子方法中覆盖父类的静态工厂方法

java - 只有一种实现的接口(interface)

c# - 未在接口(interface)中定义的属性的 setter