我首先要说的是,我知道PHP接口是如何工作的,以及如何“使用”它们。
我的问题是;它们如何在现实生活中应用?
我已经编写PHP超过3年了,从来没有感觉到界面的需要。我正在为良好实践而不是为特定目的编写接口。
答案 0 :(得分:12)
我将举例说明我在自己的实际经验中使用过界面。
当您需要定义类似插件架构的东西时,接口非常有用。假设您的应用程序接受身份验证插件,允许您的最终用户实现者与他们自己的内部auth基础结构集成(LDAP,Shibboleth,一些自定义身份验证数据库,等等)。为了使插件兼容,它必须实现以下方法:
validate_user()
start_user_session()
logout_user()
get_user_details()
如果在接口中定义,则类实现接口,确保存在必要的方法以与插件体系结构兼容。
不幸的是,PHP没有强制执行返回类型的接口方法,因此您必须注意记录方法的预期返回功能。
答案 1 :(得分:2)
它们不是那么有用 - 但是。他们的主要目的似乎是类型暗示。当您编写两个实现相同接口的单独类时,可以在函数的类型提示中使用该接口。这样,您就知道在参数中传递的对象中可以使用该接口的所有方法。
不幸的是,PHP实际上并没有检查你在该参数上调用的任何被调用方法或属性是否实际存在于该接口中,因此您可能会意外地使用接口中不可用的对象属性,从而导致对象出现潜在错误通过了另一种类型。
在这种情况下,其他语言要严格得多,只允许您只使用界面中声明的功能。
尽管如此,它们在PHP中也很方便用于此目的,并且在将来的版本中这些检查可能会变得更加严格,因此它不易出错。
答案 2 :(得分:0)
查看标准PHP库(SPL) http://php.net/manual/en/book.spl.php
Countable和RecursiveIterator可能会给你一个线索。