Глобальное пространство
(PHP 5 >= 5.3.0)
Без определения пространства имен, определения всех классов и функций находятся в глобальном пространстве - также как это было в PHP до введения пространств имен. Добавление префикса \ к именам означает, что это имя должно находиться в глобальном пространстве, даже если вы находитесь в контексте определенного пространства имен.
Пример #1 Использованиие глобального пространства и его задание
<?php
namespace A\B\C;
/* Эта функция является A\B\C\fopen */
function fopen() {
/* ... */
$f = \fopen(...); // вызов глобальной функции fopen
return $f;
}
?>
- Обзор пространств имен
- Определение пространств имен
- Определение подпространств имен
- Описание нескольких пространств имен в одном файле
- Использование пространства имен: основы
- Пространства имен и динамические особенности языка
- Ключевое слово namespace и константа __NAMESPACE__
- Использование пространств имен: импорт/создание псевдонима имени
- Глобальное пространство
- Использование пространств имен: переход к глобальной функции/константе
- Правила разрешения имен
- Часто задаваемые вопросы (FAQ): вещи, которые вам необходимо знать о пространствах имен
Коментарии
Included files will default to the global namespace.
<?php
//test.php
namespace test {
include 'test1.inc';
echo '-',__NAMESPACE__,'-<br />';
}
?>
<?php
//test1.inc
echo '-',__NAMESPACE__,'-<br />';
?>
Results of test.php:
--
-test-
That's the expected behavior, you have to declare the namespace at the top of the file to "extend" it.
If you include a global namespaced file, it will operate on the global namespace.
In namespaced context the Exception class needs to be prefixed with global prefix operator.
<?php
namespace heyholetsgo;
class MyClass
{
public function failToCatch()
{
try {
$thing = somethingThrowingAnException();
} catch (Exception $ex) {
// Not catched
}
}
public function succeedToCatch()
{
try {
$thing = somethingThrowingAnException();
} catch (Exception $ex) {
// This is now catched
}
}
}
This design of access globe name is bad, at least inconvenient.
In case that you have some legacy code, and try to copy and re-use it under some namespace. You have to add prefix "\" on any global function call.