Мне просто интересно, есть ли способ заставить класс вести себя так, как если бы он находился в глобальном пространстве имен, используя ключевое слово «use», поэтому этот класс будет вести себя как класс с именами только вне класса. Что-то вроде:
namespace wherever\somewhere\deep\deep\inside; use \; // root namespace.. note: this doesn't work class stuff{ //.... }
кто угодно?
Использование глобального пространства имен не будет работать так, как вы ожидаете.
По умолчанию вы можете ссылаться на класс с расширением имен, добавив обратную косую черту – например, $x = new \PDO(...);
, Попытка use \
не изменит это.
Если вы хотите сбросить обратную косую черту из классов с именами на глобальном уровне, вам необходимо use
каждую из них специально. В пространствах с именами PHP любая ссылка на класс, которая не имеет пространства имен, считается находящейся в текущем пространстве имен, если на нее явно не ссылается оператор use
.
например:
use \PDO, \SplFileObject;
теперь мы можем вызвать new PDO(...)
или new SplFileObject()
без обратной косой черты. Но другим глобальным классам, которые не use
, по-прежнему будет нужна обратная косая черта.
Я не думаю, что ты можешь. Если кто-то найдет хороший способ, пожалуйста, разделите. Я попробовал нижеследующее, которое не работает явно (запись здесь http://www.siteconsortium.com/h/D0000H.php ). Мне было бы очень полезно иметь возможность перейти в корневое пространство имен таким образом, так как много устаревшего кода не использует пространства имен.
$ root = __NAMESPACE__; // ошибка
пространство имен AA; function foo () {print "What AA"; }
use ($ root); // ошибка
namespace $ root; // ошибка не может использовать var
пространство имен ""; // ошибка
использовать «/»; // ошибка
пространство имен "/"; // ошибка
Здесь есть пара различных проблем. Одна вещь, которую я считала странной, это то, что я могу использовать ключевое слово «require_once $ script_name», но я не могу использовать ключевое слово «namespace $ namespace_name».
Вы можете получить доступ к глобальному пространству имен, если вы используете такие скобки:
namespace My\Space { function myScopedFunction() { .. } } namespace { function myGlobalFunction() { .. } }