Ключевое слово namespace и константа __NAMESPACE__
Вернуться к: Пространства имен
(PHP 5 >= 5.3.0, PHP 7)
PHP поддерживает два способа к абстрактно доступным элементам в текущем пространстве имен
таким, как магическая константа __NAMESPACE__
и
ключевое слово namespace.
Значение константы __NAMESPACE__
- это строка, которая содержит
имя текущего пространства имен. В глобальном пространстве, вне пространства имен, она
содержит пустую строку.
Пример #1 Пример использование константы __NAMESPACE__ в коде с пространством имен
<?php
namespace MyProject;
echo '"', __NAMESPACE__, '"'; // выводит "MyProject"
?>
Пример #2 Пример использование константы __NAMESPACE__ в глобальном пространстве
<?php
echo '"', __NAMESPACE__, '"'; // выводит ""
?>
__NAMESPACE__
полезна для динамически конструируемых
имен, например:
Пример #3 использование константы __NAMESPACE__ для динамического конструирования имени
<?php
namespace MyProject;
function get($classname)
{
$a = __NAMESPACE__ . '\\' . $classname;
return new $a;
}
?>
Ключевое слово namespace может быть использовано для явного запроса элемента из текущего пространства имен или из подпространства. Это эквивалент оператора self для классов в пространстве имен.
Пример #4 Оператор namespace, внутри пространства имен
<?php
namespace MyProject;
use blah\blah as mine; // см. "Использование пространств имен: импорт/создание псевдонима имени"
blah\mine(); // вызывает функцию MyProject\blah\mine()
namespace\blah\mine(); // вызывает функцию MyProject\blah\mine()
namespace\func(); // вызывает функцию MyProject\func()
namespace\sub\func(); // вызывает функцию MyProject\sub\func()
namespace\cname::method(); // вызывает статический метод "method" класса MyProject\cname
$a = new namespace\sub\cname(); // Создает экземпляр класса MyProject\sub\cname
$b = namespace\CONSTANT; // присваивает значение константы MyProject\CONSTANT переменной $b
?>
Пример #5 Оператор namespace в глобальном коде
<?php
namespace\func(); // вызывает функцию func()
namespace\sub\func(); // вызывает функцию sub\func()
namespace\cname::method(); // вызывает статический метод "method" класса cname
$a = new namespace\sub\cname(); // Создает экземпляр класса sub\cname
$b = namespace\CONSTANT; // присваивает значение константы CONSTANT переменной $b
?>
Вернуться к: Пространства имен