首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用"global-namespace";

使用"global-namespace";
EN

Stack Overflow用户
提问于 2013-01-08 19:48:44
回答 3查看 11.1K关注 0票数 5

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

代码语言:javascript
复制
namespace wherever\somewhere\deep\deep\inside;
use \; // root namespace.. note: this doesn't work
class stuff{
//....
}

有没有人?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-08 20:14:23

使用全局名称空间将不会以您期望的方式工作。

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

如果您想从全局命名空间的类中删除反斜杠,则需要明确地对每个类执行use。在有名称空间的PHP中,任何没有名称空间的类引用都被假定在当前名称空间中,除非它被use语句显式引用。

例如:

代码语言:javascript
复制
use \PDO, \SplFileObject;

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

票数 19
EN

Stack Overflow用户

发布于 2014-01-09 08:43:16

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

代码语言:javascript
复制
$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

票数 2
EN

Stack Overflow用户

发布于 2017-06-29 18:39:04

如果使用如下括号,则可以访问全局名称空间:

代码语言:javascript
复制
namespace My\Space {
    function myScopedFunction() { .. }
}
namespace {
    function myGlobalFunction() { .. }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14214293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档