首页 > 解决方案 > 为什么要在 php 的内部函数中添加命名空间?

问题描述

在 Symfony 中,有些函数有根命名空间而有些函数没有,为什么?

例如:

// code from symfony 
if (file_exists($cache->getPath()) && \is_object($this->container = include $cache->getPath())) {
     $this->container->set('kernel', $this);
     $oldContainer = $this->container;
     $fresh = true;
 }

file_exists没有命名空间,但是\is_object有。

我注意到这种差异贯穿于整个 Symfony 项目。

标签: phpsymfonynamespaces

解决方案


这很可能是为了获得在 PHP 7.0 中引入某些函数的性能改进,其中一些函数被操作码取代。为了获得这些改进,这些函数必须被根命名空间引用。

PHP-CS-Fixer GitHub 存储库上的这个问题包含一个注释,其中包含使用它的函数列表。file_exists没有以这种方式改进,因此通过根命名空间引用它不会产生任何性能改进。Symfony GitHub 存储库的 PR 也多次引用此问题。

这是PHP 源代码的链接,您还可以在其中找到具有此行为的函数列表。


推荐阅读