在像PHP这样的弱类型语言中,接口的意义是什么?

What is the point of interfaces in a weakly-typed language like PHP?

我一直没能弄清楚。如果您的语言不进行类型检查,那么接口为您提供了哪些好处?


当子类"忘记"在其父类中实现某个抽象方法时,接口会导致程序提前失败,并且更容易预测。

在PHP的传统OOP中,您必须依赖以下内容来发出运行时错误:

1
2
3
4
5
6
class Base_interface {
    function implement_me() { assert(false); }
}

class Child extends Base_interface {
}

对于一个接口,当接口的一个子类没有实现这样的方法时,在声明子类时,而不是稍后在使用子类时,您会得到立即的反馈。


从这个链接中获取(很好地总结了一下):

  • 接口允许您定义/创建课程的通用结构-为对象设置标准。
  • 接口解决了单一继承-他们允许你从多个来源。
  • 接口提供了灵活的基础/根结构去上课吧。
  • 当你有接口的时候在一个项目上工作的多个编码人员;可以设置松散结构让程序员跟随他们担心细节。


我个人认为,在构建一个数据访问层时,接口是一个很好的解决方案,它必须支持多个DBMS。每个DBMS实现都必须实现具有查询、fetchssoc、fetchrow、numrow、transactionstart、transactioncomit、transactionrollback等功能的全局数据访问接口。因此,在扩展数据访问时ss positibilities您必须使用通用定义函数schema,这样您的应用程序就不会在某个时刻中断,因为您认为函数查询现在应该命名为execquery。

接口有助于您在更大的范围内发展:)


类型有三种不同的功能:

  • 设计
  • 文档
  • 实际类型检查

前两个根本不需要任何形式的类型检查。因此,即使PHP没有检查接口,它们仍然会因为这两个原因而有用。

例如,我在做Ruby时总是考虑我的接口,尽管Ruby没有接口。我经常希望我能有一些方法在源代码中记录这些设计决策。

另一方面,我见过大量使用接口的Java代码,但显然作者从未考虑过它们。事实上,在一个例子中,我们可以从界面中的缩进、空白和一些剩余的注释中看到作者实际上刚刚复制和粘贴了类定义并删除了所有方法体。

现在到第三点:PHP实际上执行类型检查接口。仅仅因为它在运行时对它们进行类型检查并不意味着它根本不进行类型检查。

实际上,它甚至不在运行时检查它们,而是在加载时检查它们,这发生在运行时之前。"类型检查不是在运行时发生的,而是在此之前发生的"这不是静态类型检查的定义吗?


函数/方法签名中的类型暗示允许您对类与它的环境的接口方式有更多的控制。

如果您希望类的用户只使用正确的对象作为方法参数,那么您可能会遇到麻烦。为了避免这种情况,您必须实现复杂的检查和过滤器,这些检查和过滤器只会膨胀您的代码,而且肯定会降低代码的性能。

类型提示为您提供了一个工具来确保兼容性,而不需要任何膨胀的手写检查。它还允许你的班级告诉全世界他们能做什么,他们能适应什么环境。

尤其是在Zend框架这样的复杂框架中,接口使您的生活更容易,因为它们告诉您从类中期望什么,并且您知道要实现什么方法才能与某个东西兼容。


它可能是弱类型的,但有类型提示方法:function myFunc(MyInterface $interface)。此外,接口在测试和分离代码方面也有帮助。


通常与单元测试(测试驱动设计)一起使用的接口。

它还为您提供了更稳定的代码。接口还用于支持迭代器(例如支持对象上的foreach)和比较器。


如果没有添加具有完全相同签名的必需方法,则会出现错误。


在我看来,没有意义,没有必要,也没有意义。诸如接口、可见性修饰符或类型提示之类的东西被设计来强制程序"正确性"(在某种意义上),而不实际运行它。因为在像PHP这样的动态语言中这是不可能的,所以这些构造基本上是无用的。之所以将它们添加到PHP,唯一的原因是使其看起来更像Java,从而使语言更吸引"企业"市场。

忘了加:未加注释的向下投票很糟糕。;