繁体   English   中英

PHP接口:它们在实践中如何可用?

[英]PHP Interfaces: How are they usable in practice?

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

我的问题是; 它们如何在现实生活中应用?

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

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

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

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

如果在接口中定义,则类实现接口,确保存在必要的方法以与插件体系结构兼容。

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

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

不幸的是,PHP实际上并没有检查你在该参数上调用的任何被调用方法或属性是否实际存在于该接口中,因此您可能会意外地使用接口中不可用的对象属性,从而在不同对象时导致潜在的错误类型被传递。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM