Простір імен, це один із способів інкапсуляції елементів. Таке абстрактне поняття можна побачити в багатьох місцях. Наприклад, в операційній системі директорії служать для угруповання файлів і виступають в якості простору імен для файлів, які в них знаходяться. Як приклад файл text.txt може перебувати відразу в декількох директоріях: /files і /docs, але дві копії text.txt не можуть існувати в одній директорії. Також, для доступу до text.txt ззовні, ми повинні додати ім’я директорії перед ім’ям файлу використовуючи роздільник (/files/text.txt). Такий же принцип поширюється і на простір імен.
У PHP простір імен використовується для вирішення двох проблем:
1. Конфлікт імен між вашим кодом і сторонніми.
2. Можливість створювати псевдоніми (або скорочення) для довгих імен, щоб полегшити першу проблему і поліпшити читаність вихідного коду.
Приклад використання.
Припустимо, у нас така файлова структура:
-- App --- Main ---- MyClass.php - namespace.php
Опишемо клас MyClasss.php:
<?php
// App/Main/MyClass.php
namespace App\Main;
class MyClass {
function hello() {
return "hello";
}
}
?>
За допомогою простору імен ми можемо отримати доступ до класу MyClass
(файл namespace.php):
<?php
// namespace.php
namespace App\Main;
require_once "App\Main\MyClass.php";
$obj = new \App\Main\MyClass;
echo $obj->hello(); // hello
?>
Отож, ми можемо створити такий же клас, тільки в іншій директорії. Давайте створимо клас з такою ж назвою в папці App/Core.
<?php
// App/Core/MyClass.php
namespace App\Core;
class MyClass {
function hello() {
return "hello, it's core";
}
}
?>
Отримаємо доступ до цього класу:
<?php
namespace App\Core;
require_once "App\Core\MyClass.php";
$obj = new \App\Core\MyClass;
echo $obj->hello(); // hello it’s core
?>
Створення псевдоніма імені
Псевдоніми для простору імен використовуються для більш простого доступу до потрібного простору. Наприклад, у вас така структура namespace App/Core/Controller/, щоб отримати доступ до одного з класів, потрібно буде написати весь цей шлях, наприклад, App/Core/Controller/AppController.php. Набагато простіше було б написати CoreController/AppController.php. Це можна реалізувати за допомогою псеводнімов.
Для створення псевдоніма використовують ключове слово use
.
Приклад:
<?php
use App/Core/Controller as CoreController;
// …
$app = new CoreController\AppController.php;
?>