## Ключевое слово namespace и магическая константа __NAMESPACE__

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

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

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open