Обзор пространств имён

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

Что такое пространства имён? В широком смысле - это один из способов инкапсуляции элементов. Такое абстрактное понятие можно увидеть во многих местах. Например, в любой операционной системе директории служат для группировки связанных файлов и выступают в качестве пространства имён для находящихся в них файлов. В качестве конкретного примера файл foo.txt может находиться сразу в обеих директориях: /home/greg и /home/other, но две копии foo.txt не могут существовать в одной директории. Кроме того, для доступа к foo.txt извне директории /home/greg, мы должны добавить имя директории перед именем файла используя разделитель, чтобы получить /home/greg/foo.txt. Этот же принцип распространяется и на пространства имён в программировании.

В PHP пространства имён используются для решения двух проблем, с которыми сталкиваются авторы библиотек и приложений при создании повторно используемых элементов кода, таких как классы и функции:

  1. Конфликт имён между вашим кодом и внутренними классами/функциями/константами PHP или сторонними.
  2. Возможность создавать псевдонимы (или сокращения) для Ну_Очень_Длинных_Имён, чтобы облегчить первую проблему и улучшить читаемость исходного кода.

Пространства имён в PHP предоставляют возможность группировать логически связанные классы, интерфейсы, функции и константы.

Пример #1 Пример синтаксиса, использующего пространство имён

<?php
namespace my\name; // смотрите раздел "Определение пространств имён"
class MyClass {}
function
myfunction() {}
const
MYCONST = 1;

$a = new MyClass;
$c = new \my\name\MyClass; // смотрите раздел "Глобальная область видимости"

$a = strlen('hi'); // смотрите раздел "Использование пространств имён: возврат
// к глобальной функции/константе"

$d = namespace\MYCONST; // смотрите раздел "оператор пространства имён и
// константа __NAMESPACE__"
$d = __NAMESPACE__ . '\MYCONST';
echo
constant($d); // смотрите раздел "Пространства имён и динамические особенности языка"
?>

Замечание: Имена пространств имён регистронезависимы.

Замечание:

Пространства имён PHP или составные имена, начинающиеся с этого слова (например, такие как PHP\Classes), зарезервированы для нужд языка, их не следует использовать в пользовательском коде.