PHP:具有全局命名空间的单个文件中的命名空间

dot*_*hen 11 php namespaces

我有一个需要()'sa命名空间的文件,如下:

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

$foo = new Beer\Carlsburg();
?>
Run Code Online (Sandbox Code Playgroud)

我想将Beer命名空间直接放在同一个文件中,就像这个(unworking)示例:

<?php
namespace Beer {
    class Carlsburg {}
}

$foo = new Beer\Carlsburg();
?>
Run Code Online (Sandbox Code Playgroud)

但是,PHP解释器抱怨说 No code may exist outside of namespace.因此我可以$foo在一个命名空间中包装声明,但是我还必须在该命名空间中包装Beer来访问它!这是我试图避免的一个工作示例:

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

namespace Main {
    $foo = new Beer\Carlsburg();
}
?>
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Man*_*eUK 16

您应该使用全局命名空间:

<?php
namespace Beer {
    class Carlsburg {}
}


namespace { // global code
    $foo = new Beer\Carlsburg();
}
?>
Run Code Online (Sandbox Code Playgroud)

看这里 - > http://php.net/manual/en/language.namespaces.definitionmultiple.php