【问题标题】:PHP Interfaces: How are they usable in practice?PHP 接口:它们在实践中如何使用?
【发布时间】:2011-11-14 21:28:00
【问题描述】:

我首先要说我知道 PHP 接口是如何工作的以及如何“使用”它们。

我的问题是;它们如何在实际应用中变得有用?

我已经编写 PHP 超过 3 年了,从来没有觉得 需要 一个界面。我编写接口更多是为了良好的实践,而不是为了特定目的。

【问题讨论】:

  • 鉴于 PHP 没有严格的类型检查,而是使用表单鸭子类型,我同意。我认为使用接口有助于理解您的代码。
  • @Micheal Mior:PHP 知道类型提示:function foo (BarClass $x) { echo $x->hello; }
  • @KingCrunch 确实如此,但它不是万无一失的。

标签: php coding-style interface


【解决方案1】:

我将提供一个我在自己的实际经验中使用接口的示例。

当您需要定义诸如插件架构之类的东西时,接口非常有用。假设您的应用程序接受身份验证插件,允许您的最终用户实施者与他们自己的内部身份验证基础设施(LDAP、Shibboleth、一些自定义身份验证数据库等)集成。为了使插件兼容,它必须实现以下方法:

validate_user()
start_user_session()
logout_user()
get_user_details()

如果在接口中定义,则类会实现该接口,以确保提供必要的方法以与插件架构兼容。

不幸的是,PHP 不强制接口方法的返回类型,因此您必须注意记录方法的预期返回功能。

【讨论】:

    【解决方案2】:

    它们还没有那么有用 - 还没有。它们的主要目的似乎是用于类型提示。当您编写两个实现相同接口的单独类时,您可以在函数的类型提示中使用该接口。这样,您就知道您在参数中传递的对象中获得了该接口的所有方法。

    不幸的是,PHP 并不会真正检查您在该参数上调用的任何被调用方法或属性是否确实在该接口中,因此您可能会不小心使用接口中不可用的对象属性,从而导致在对象调用时出现潜在错误传递了不同类型的。

    其他语言在这种情况下要严格得多,只允许您使用接口中声明的功能。

    尽管如此,它们在 PHP 中也很方便,而且这些检查在未来的版本中可能会变得更严格,因此更不容易出错。

    【讨论】:

      【解决方案3】:

      查看标准 PHP 库 (SPL) http://php.net/manual/en/book.spl.php

      Countable 和 RecursiveIterator 可能会给你一个线索。

      【讨论】:

        猜你喜欢
        • 2013-12-03
        • 1970-01-01
        • 2010-12-31
        • 1970-01-01
        • 2013-03-13
        • 1970-01-01
        • 2018-04-04
        • 1970-01-01
        • 2011-01-18
        相关资源
        最近更新 更多