PHP: Пространства имен в одном файле с глобальным пространством имен

У меня есть файл, который требует() пространство имен, как таковое:

<?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 в его собственное пространство имен (оставьте его в глобальном пространстве имен)?

Спасибо.

Ответ 4

Попробуйте поместить обратную косую черту перед именем пространства имен:

$beer = new \Beer\Carlsberg();

Исходная обратная косая черта переводится в "глобальное пространство имен". Если вы не ставите ведущую обратную косую черту, имя класса переводится в текущее пространство имен.