PHP: 在单个文件中使用全局命名空间的命名空间

14

我有一个文件,需要使用require()函数引入一个命名空间,如下所示:

<?php
require_once('Beer.php');   // This file contains the Beer namespace

$foo = new Beer\Carlsburg();
?>

我想直接将Beer命名空间放在同一个文件中,像这个(无法工作的)示例:

<?php
namespace Beer {
    class Carlsburg {}
}

$foo = new Beer\Carlsburg();
?>

然而,PHP解释器报错:No code may exist outside of namespace。因此,我可以将$foo的声明放在命名空间里面,但这样就必须包裹Beer在同一个命名空间中才能访问它!下面是一个可行的示例,但我想避免这种写法:

<?php
namespace Main\Beer {
    class Carlsburg {}
}

namespace Main {
    $foo = new Beer\Carlsburg();
}
?>

有没有办法在文件中包含Beer命名空间的代码,但是不将$foo声明包装在它自己的命名空间中(让它保留在全局命名空间中)?

谢谢。


你应该将Heineken作为命名空间! - marko
4个回答

20

除非你写成 $foo = new Main\Beer\Carlsburg();,否则这个不会起作用。 - Dmitry Kudryavtsev

4

3
尝试在命名空间名称前面加上反斜杠:
$beer = new \Beer\Carlsberg();

初始反斜杠被翻译为“全局命名空间”。如果您没有加上前导反斜杠,则类名将被翻译为当前命名空间。


3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接