如何从命名空间PHP调用全局函数类

use*_*265 4 php namespaces

是否有任何方法可以避免使用经常反斜杠?

现在,如果我使用命名空间并在其中调用全局内容,我必须使用反斜杠:

namespace foo;
$a = new \my\name(); // instantiates "my\name" class
echo \strlen('hi'); // calls function "strlen"
$a = \INI_ALL; // $a is set to the value of constant "INI_ALL"
Run Code Online (Sandbox Code Playgroud)

在那种情况下,命名空间内的代码变得非常难看,有什么方法可以避免这种情况???

该示例取自该网址:http://www.php.net/manual/en/language.namespaces.faq.php

但我的问题是,如果我需要从命名空间调用一些内置类,我必须在名称前面使用反斜杠,我可以以某种方式避免它吗?

Gor*_*don 6

全局命名空间中的常量和函数不必以反斜杠作为前缀.PHP将回退到它自己的全局命名空间.PHP手册中有一整章解释了这一点:

在命名空间内,当PHP在类名,函数或常量上下文中遇到非限定名时,它会使用不同的优先级来解析它们.类名始终解析为当前名称空间名称.[...]对于函数和常量,如果不存在命名空间函数或常量,PHP将回退到全局函数或常量.

  • 但是你需要添加"native"类的反斜杠,如`\ Exception`,`\ Memcached`,或者你可以选择添加:`use\Exception;`到文件的顶部.然后你可以使用`new Exception('..');`而不使用反斜杠. (4认同)