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
в его собственное пространство имен (оставьте его в глобальном пространстве имен)?
Спасибо.
Ответы
Ответ 1
Вы должны использовать глобальное пространство имен:
<?php
namespace Beer {
class Carlsburg {}
}
namespace { // global code
$foo = new Beer\Carlsburg();
}
?>
Смотрите здесь → http://php.net/manual/en/language.namespaces.definitionmultiple.php
Ответ 2
Попробуйте это
namespace Beer {
class Carlsburg {}
}
//global scope
namespace {
$foo = new Beer\Carlsburg();
}
Как пример # 3 в Определение нескольких пространств имен в одном файле
Ответ 3
Просто напишите, у него нет "имени":
<?php
namespace Main\Beer {
class Carlsburg {}
}
namespace {
use Main\Beer;
$foo = new Beer\Carlsburg();
}
?>
Демо и см. Определение нескольких пространств имен в одном файле Документы.
Ответ 4
Попробуйте поместить обратную косую черту перед именем пространства имен:
$beer = new \Beer\Carlsberg();
Исходная обратная косая черта переводится в "глобальное пространство имен". Если вы не ставите ведущую обратную косую черту, имя класса переводится в текущее пространство имен.