Обзор пространств имен
(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 пространства имен используются для решения двух проблем, с которыми сталкиваются авторы библиотек и приложений при создании повторно используемых элементов кода, таких как классы и функции:
- Конфликт имен между вашим кодом и внутренними классами/функциями/константами PHP или сторонними.
- Возможность создавать псевдонимы (или сокращения) для Ну_Очень_Длинных_Имен, чтобы облегчить первую проблему и улучшить читаемость исходного кода.
Пространства имен 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
), являются зарезервированными для нужд языка и их не следует использовать в пользовательском коде.