我只是想知道是否有一种方法可以使用“use”关键字使一个类的行为就好像它在全局命名空间中一样,所以这个类只能从类外部表现为命名空间类。就像是:
namespace wherever\somewhere\deep\deep\inside;
use \; // root namespace.. note: this doesn't work
class stuff{
//....
}
任何人?
我只是想知道是否有一种方法可以使用“use”关键字使一个类的行为就好像它在全局命名空间中一样,所以这个类只能从类外部表现为命名空间类。就像是:
namespace wherever\somewhere\deep\deep\inside;
use \; // root namespace.. note: this doesn't work
class stuff{
//....
}
任何人?
使用全局命名空间不会按您期望的方式工作。
默认情况下,您可以通过添加反斜杠来引用全局命名空间类——例如$x = new \PDO(...);
. 努力use \
不会改变这一点。
如果要从全局命名空间的类中删除反斜杠,则需要use
专门针对它们中的每一个。在命名空间 PHP 中,任何没有命名空间的类引用都被假定在当前命名空间中,除非它被声明显式引用use
。
例如:
use \PDO, \SplFileObject;
现在我们可以调用new PDO(...)
或new SplFileObject()
不使用反斜杠。但是其他不在的全局类use
仍然需要反斜杠。
如果您使用这样的括号,您可以访问全局命名空间:
namespace My\Space {
function myScopedFunction() { .. }
}
namespace {
function myGlobalFunction() { .. }
}
我不认为你可以。如果有人找到好的方法,请分享。我尝试了以下显然不起作用的方法(文章在这里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
。