我有一个文件要求()是一个名称空间,如下:
<?php
require_once('Beer.php'); // This file contains the Beer namespace
$foo = new Beer\Carlsburg();
?>
我想将Beer命名空间直接放在同一个文件中,就像这个(unworking)示例:
<?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
声明包装在自己的命名空间中(将其留在全局命名空间)?
感谢。
答案 0 :(得分:15)
您应该使用全局命名空间:
<?php
namespace Beer {
class Carlsburg {}
}
namespace { // global code
$foo = new Beer\Carlsburg();
}
?>
见这里 - &gt; http://php.net/manual/en/language.namespaces.definitionmultiple.php
答案 1 :(得分:4)
试试这个
namespace Beer {
class Carlsburg {}
}
//global scope
namespace {
$foo = new Beer\Carlsburg();
}
中的示例#3
答案 2 :(得分:3)
尝试在命名空间名称前添加反斜杠:
$beer = new \Beer\Carlsberg();
初始反斜杠被转换为“全局命名空间”。如果不放置前导反斜杠,则将类名转换为当前名称空间。
答案 3 :(得分:3)
写下来,它没有“名字”:
<?php
namespace Main\Beer {
class Carlsburg {}
}
namespace {
use Main\Beer;
$foo = new Beer\Carlsburg();
}
?>