为啥不支持将 PHP 函数导入当前命名空间
Posted
技术标签:
【中文标题】为啥不支持将 PHP 函数导入当前命名空间【英文标题】:Why is Importing a PHP Function into the Current Namespace Unsupported为什么不支持将 PHP 函数导入当前命名空间 【发布时间】:2013-06-29 00:35:38 【问题描述】:根据php documentation
PHP 命名空间支持三种别名或导入:类名别名、接口名别名和命名空间名别名。请注意,不支持导入函数或常量。
有人知道为什么不支持导入函数或常量的历史或技术背景吗?
【问题讨论】:
这些限制与 C# 基本相同。您也不能在该语言中“导入”或“别名”单个函数或常量。为什么要这样做? @RobertHarvey 以类似于 python 的风格编写代码/系统。 @Robert 因为这样可以更方便?bar()
而不是 Foo\bar()
...
@AlanStorm PHP 是一种带有接口的大括号语言,不是吗? Python 的编程方法完全不同。 C# 使用 扩展方法使这更容易一些。
wiki.php.net/rfc/namespaces (9. 导入函数)
【参考方案1】:
我联系了 Jochem Maas(作者 of this five year old RFC),虽然他不愿指出一个原因(可以理解,因为他目前没有深入参与命名空间系统),但他的三个因素是
类名冲突比函数名冲突更像是一个现实世界的问题
PHP 函数和类位于引擎代码的不同区域,在 use
语句中解析哪个是哪个存在技术障碍。
对于如何处理自动加载器以及特定功能的导入/混叠存在一些不确定性/意见分歧。 (自动加载器是一个单独的系统,仅适用于类)
最终,PHP 的实用主义赢得了胜利,这就是我们拥有今天的命名空间系统的原因。
【讨论】:
以上是关于为啥不支持将 PHP 函数导入当前命名空间的主要内容,如果未能解决你的问题,请参考以下文章