Обзор пространств имён
(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 и магическая константа __NAMESPACE__»
$d = __NAMESPACE__ . '\MYCONST';
echo constant($d); // Смотрите раздел «Пространства имён и динамические особенности языка»
?>
Замечание:
Имена пространств имён регистронезависимы.
Замечание:
Название пространства имён «PHP
» и составные названия,
которые начинаются с этого слова (например, PHP\Classes
), зарезервированы
для внутренних целей языка, их не нужно писать в пользовательском коде.