我只是想知道是否有一种方法可以使用"use“关键字使一个类的行为就像它在全局名称空间中一样,这样这个类就只在类的外部表现为命名空间类。类似于:
namespace wherever\somewhere\deep\deep\inside;
use \; // root namespace.. note: this doesn't work
class stuff{
//....
}有没有人?
发布于 2013-01-08 20:14:23
使用全局名称空间将不会以您期望的方式工作。
默认情况下,您可以通过添加反斜杠来引用全局命名空间的类--例如$x = new \PDO(...);。尝试use \不会改变这一点。
如果您想从全局命名空间的类中删除反斜杠,则需要明确地对每个类执行use。在有名称空间的PHP中,任何没有名称空间的类引用都被假定在当前名称空间中,除非它被use语句显式引用。
例如:
use \PDO, \SplFileObject;现在我们可以调用不带反斜杠的new PDO(...)或new SplFileObject()。但是其他不在use中的全局类仍然需要反斜杠。
发布于 2014-01-09 08:43:16
我觉得你做不到。如果有人找到了一个好的方法,请分享。我尝试了下面的方法,但显然不起作用(这里是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。
发布于 2017-06-29 18:39:04
如果使用如下括号,则可以访问全局名称空间:
namespace My\Space {
function myScopedFunction() { .. }
}
namespace {
function myGlobalFunction() { .. }
}https://stackoverflow.com/questions/14214293
复制相似问题