Ключевое слово namespace и константа __NAMESPACE__


(PHP 5 >= 5.3.0)

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
?>