Простір імен


Простір імен, це один із способів інкапсуляції елементів. Таке абстрактне поняття можна побачити в багатьох місцях. Наприклад, в операційній системі директорії служать для угруповання файлів і виступають в якості простору імен для файлів, які в них знаходяться. Як приклад файл 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;
?>