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

时间:2012-02-14 09:24:26

标签: php namespaces

我有一个文件要求()是一个名称空间,如下:

<?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声明包装在自己的命名空间中(将其留在全局命名空间)?

感谢。

4 个答案:

答案 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();
}

根据Defining multiple namespaces in the same file

中的示例#3

答案 2 :(得分:3)

尝试在命名空间名称前添加反斜杠:

$beer = new \Beer\Carlsberg();

初始反斜杠被转换为“全局命名空间”。如果不放置前导反斜杠,则将类名转换为当前名称空间。

答案 3 :(得分:3)

写下来,它没有“名字”:

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

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

Demo并查看Defining multiple namespaces in the same fileDocs