Пространства имен, это один из способов инкапсуляции элементов. Такое абстрактное понятие можно увидеть во многих местах. Например, в операционной системе директории служат для группировки файлов и выступают в качестве пространства имен для находящихся в них файлов. В качестве примера файл text.txt может находиться сразу в нескольких директориях: /files и /docs, но две копии text.txt не могут существовать в одной директории. Также, для доступа к text.txt извн, мы должны добавить имя директории перед именем файла используя разделитель (/files /text.txt). Такой же принцип распространяется и на пространства имен.
В PHP пространства имен используются для решения двух проблем:
- Конфликт имен между вашим кодом и сторонними.
- Возможность создавать псевдонимы (или сокращения) для длинных имен, чтобы облегчить первую проблему и улучшить читаемость исходного кода.
Пример использования.
Допустим, у нас такая файловая структура:
-- App
--- Main
---- MyClass.php
- namespace.php
Опишем класс MyClasss.php:
<?php
namespace App\Main;
class MyClass {
function hello() {
return "hello";
}
}
?>
С помощью пространст имен мы можем получить доступ к классу MyClass
(файл namespace.php):
<?php
namespace App\Main;
require_once "App\Main\MyClass.php";
$obj = new \App\Main\MyClass;
echo $obj->hello();
?>
Исходя из описания, мы можем создать такой же класс, только в другой директории. Давайте создадим класс с таким же названием в папке App/Core.
<?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();
?>
Создание псеводима имени
Псевдонимы для пространст имен используються для более просто доступа к нужному пространству. Например, у вас такая структура namespace App/Core/Controller/, чтобы получить доступ к одному из классов, нужно будет написать весь этот путь, например, App/Core/Controller/AppController.php. Намного проще было бы написать CoreController/AppController.php. Это можно реализовать с помощью псеводнимов.
Для создания псевдонима используют ключевое слово use
.
Пример:
<?php
use App/Core/Controller as CoreController;
$app = new CoreController\AppControoler.php;
?>