ООП – Простір імен
29.04.2022Простір імен, це один із способів інкапсуляції елементів. Таке абстрактне поняття можна побачити у багатьох місцях. Наприклад, в операційній системі директорії служать для групування файлів і виступають як простір імен для файлів, що знаходяться в них. Як приклад, файл text.txt може знаходитися відразу в декількох директоріях: /files і /docs, але дві копії text.txt не можуть існувати в одній директорії. Також, для доступу до text.txt ззовні, ми повинні додати ім’я директорії перед ім’ям файлу, використовуючи роздільник (/files /text.txt). Такий самий принцип поширюється і для простору імен.
У PHP простір імен використовуються для вирішення двох проблем:
- Конфлікт імен між вашим та стороннім кодом
- Можливість створювати псевдоніми (або скорочення) для довгих імен, щоб полегшити першу проблему та покращити читання вихідного коду.
// файлова структура
// -- App
// --- Main
// ---- MyClass.php
// - namespace.php
// опис класу MyClasss.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. Набагато простіше було б написати CoreController/AppController. Це можна реалізувати за допомогою псеводнімів.
Для створення псевдоніма використовують ключове слово use
<?php
use App/Core/Controller as CoreController;
// …
$app = new CoreController/AppController;
?>