为啥不支持将 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 函数导入当前命名空间的主要内容,如果未能解决你的问题,请参考以下文章

为啥要将类型放在未命名的命名空间中?

php命名空间

命名空间

为啥将 javascript 命名空间作为一个函数?

在其他命名空间中使用多个类

为啥 ANSI C 没有命名空间?