PHP之类的弱类型语言的接口有什么意义?

时间:2010-05-03 13:15:50

标签: php interface

我从来没有弄明白这一点。如果您的语言没有进行类型检查,那么界面会为您带来哪些好处?

9 个答案:

答案 0 :(得分:10)

当子类“忘记”在其父类中实现某个抽象方法时,接口会导致程序更早失败并且更可预测。

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

class Base_interface {
    function implement_me() { assert(false); }
}

class Child extends Base_interface {
}

使用接口,当您的某个接口的某个子类没有实现这样的方法时,在声明子类时,而不是在使用它的过程中,您会得到即时反馈。

答案 1 :(得分:4)

取自this link(很好地总结):

  • 接口允许您定义/创建 您班级的通用结构 - 为对象设置标准。
  • 接口解决了问题 单继承 - 他们允许你 从多个人那里注入“品质” 源。
  • 接口提供灵活性 您没有的基础/根结构 上课。
  • 当你拥有时,界面非常棒 多个程序员在一个项目上工作 ;你可以建立一个松散的结构 让程序员遵循并让 他们担心细节。

答案 2 :(得分:2)

我个人发现在构建一个必须支持多个DBMS的DataAccess层时连接一个简洁的解决方案。每个DBMS实现必须使用Query,FetchAssoc,FetchRow,NumRows,TransactionStart,TransactionCommit,TransactionRollback等函数实现全局DataAccess接口。因此,当您扩展数据访问权限时,您将被迫使用通用定义的函数库,因此您'应用程序不会在某些时候中断,因为您认为函数Query现在应该命名为execQuery。

接口可以帮助您在更大的范围内发展:)

答案 3 :(得分:1)

类型提供三种不同的功能:

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

前两个不需要任何形式的类型检查 。所以,即使PHP没有没有检查接口,他们仍然只是出于这两个原因而有用。

例如,我在做Ruby时总是考虑我的接口,尽管事实上Ruby没有接口。而且我经常希望能在源代码中以某种方式记录那些设计决策。

另一方面,我看到很多使用接口的Java代码,但显然作者从未想过它们。实际上,在一种情况下,可以从界面中的缩进,空白和一些剩余的注释中看到作者实际上刚刚复制并粘贴了类定义并删除了所有方法体。

现在到第三点:PHP实际上做了类型检查接口。仅仅因为它在运行时检查它们并不意味着它不会输入来检查它们

事实上,它甚至不会在运行时检查它们,它会在加载时检查它们,这会在运行时之前发生。并不是“类型检查不会在运行时发生,而是在那之前”几乎是静态类型检查的定义?

答案 4 :(得分:0)

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

答案 5 :(得分:0)

接口通常用于单元测试(测试驱动设计)。

它还为您提供更稳定的代码。 接口也用于支持迭代器(例如,支持foreach on objects)和比较器。

答案 6 :(得分:0)

它可能是弱类型的,但是方法有类型提示:function myFunc(MyInterface $interface) 此外,接口确实有助于测试和解耦代码。

答案 7 :(得分:0)

函数/方法签名中的类型提示使您可以更好地控制类与其环境接口的方式。

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

类型提示为您提供了一种工具,可确保兼容性,而无需任何臃肿的手写检查。它还允许您的课程告诉全世界他们可以做什么以及他们适合的位置。

特别是在像Zend Framework这样的复杂框架中,接口使您的生活变得更加轻松,因为它们告诉您对类的期望,并且您知道要实现哪些方法以与某些东西兼容。

答案 8 :(得分:-4)

在我看来,没有必要,也没有任何意义。诸如接口,可见性修饰符或类型提示之类的东西旨在强制执行程序“正确性”(在某种意义上)而不实际运行它。由于这在像php这样的动态语言中是不可能的,因此这些结构基本上是无用的。将它们添加到php的唯一原因是让它看起来更像java,从而使语言对“企业”市场更具吸引力。

忘记添加:取消注释downvoting糟透了。 ; //