使用“global-namespace”;

时间:2013-01-08 11:48:44

标签: php namespaces

我只是想知道是否有一种方法可以使一个类的行为就好像它在全局命名空间中使用“use”关键字一样,所以这个类只能从类的外部表现为命名空间类。 类似的东西:

namespace wherever\somewhere\deep\deep\inside;
use \; // root namespace.. note: this doesn't work
class stuff{
//....
}

3 个答案:

答案 0 :(得分:18)

使用全局命名空间将无法按预期方式工作。

默认情况下,您可以通过添加反斜杠来引用全局命名空间类 - 例如$x = new \PDO(...);。尝试use \不会改变这一点。

如果要从全局命名空间类中删除反斜杠,则需要专门use每个类。在命名空间PHP中,假定没有命名空间的任何类引用都在当前命名空间中,除非它由use语句显式引用。

例如:

use \PDO, \SplFileObject;

现在我们可以在没有反斜杠的情况下调用new PDO(...)new SplFileObject()。但是不在use中的其他全局类仍然需要反斜杠。

答案 1 :(得分:1)

如果使用这样的括号,则可以访问全局命名空间:

namespace My\Space {
    function myScopedFunction() { .. }
}
namespace {
    function myGlobalFunction() { .. }
}

答案 2 :(得分:0)

我认为你不能。如果有人找到一个好方法,请分享。 我尝试了下面哪个显然不起作用(写在这里http://www.siteconsortium.com/h/D0000H.php)。我觉得能够以这种方式转到根命名空间非常有用,因为很多遗留代码都不使用命名空间。

$root = \_\_NAMESPACE\_\_;   // error 

namespace AA; 
function foo() { print " What AA "; }

use ($root);      // error

namespace $root;  // error can't use var

namespace ""; // error

use "/"; // error

namespace "/";   // error

这里有几个不同的问题。我认为奇怪的一点是,我可以使用关键字require_once $script_name,但我无法使用关键字namespace $namespace_name

相关问题