Namespaces overview

Оновлено: 12.05.2023

(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 або сторонніми класами/функціями/константами. Можливість псевдонімізувати (або скорочувати) Extra_Long_Names покликана полегшити першу проблему, покращуючи читабельність вихідного коду.

Простори імен PHP забезпечують спосіб групування пов'язаних класів, інтерфейсів, функцій і констант. Ось приклад синтаксису простору імен у PHP:

Приклад #1 Приклад синтаксису простору імен

<?php
namespace my\name; // see "Defining Namespaces" section

class MyClass {}
function myfunction() {}
const MYCONST = 1;

$a = new MyClass;
$c = new \my\name\MyClass; // see "Global Space" section

$a = strlen('hi'); // see "Using namespaces: fallback to global
                   // function/constant" section

$d = namespace\MYCONST; // see "namespace operator and __NAMESPACE__
                        // constant" section
$d = __NAMESPACE__ . '\MYCONST';
echo constant($d); // see "Namespaces and dynamic language features" section
?>

Примітка: Імена просторів імен не залежать від регістру.

Зауважте:

Ім'я простору імен PHP і складені імена, що починаються з цього імені (наприклад, PHP\Classes), зарезервовані для внутрішнього використання і не повинні використовуватися у коді користувацького простору.