2012-08-28 57 views
3

有什么办法如何避免使用如此经常的反斜杠?如何从命名空间PHP调用全局函数类

现在,如果我使用的命名空间,并调用里面的东西它全球的我必须使用反斜线:

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" 

在这种情况下,里面的代码命名空间变得非常难看,有什么办法如何避免这种情况? ??

的例子是来自于该网址采取:http://www.php.net/manual/en/language.namespaces.faq.php

但是我的这个问题,如果我需要调用一些内置的类从命名空间,我有在名称前使用反斜杠,可我不知怎么避免呢?

+0

您不需要为每个PHP的内置函数加上前缀。 – fdomig

+0

[命名空间文档](http://php.net/manual/en/language.namespaces.php)真的很糟糕 – diEcho

回答

6

来自全局名称空间的常量和函数不必与反斜杠相加。 PHP将自行回退到全局名称空间。还有就是在PHP手册一整章解释这一点:

在命名空间内部,当PHP遇到不合格的名称在类名,函数或常量背景下,解决了这些有不同的优先级类名称始终解析为当前名称空间名称。 [...]对于函数和常量,如果名称空间函数或常量不存在,PHP将回退到全局函数或常量。

+0

是的,我应该怎么处理异常,例如,或者类中的任何其他编译?像memcached等...?如果我没有使用反斜杠,即使是PHP构建的扩展类,它也不起作用。这意味着在代码中有很多反斜杠:( – user1016265

+1

@ user1016265一个异常既不是一个函数,也不是一个常量,而是一个类,并且该手册明确指出类名解析为当前名称空间名称,因此您必须预先设置它们或 – Gordon

+4

然而,你确实需要在'\ Exception','\ Memcached'这样的“本地”类中添加反斜杠,或者你可以选择添加:'use \ Exception;'到顶部你的文件,然后你可以使用新的异常('..');'没有反斜杠 – Michael

相关问题