Пространства имен, это один из способов инкапсуляции элементов. Такое абстрактное понятие можно увидеть во многих местах. Например, в операционной системе директории служат для группировки файлов и выступают в качестве пространства имен для находящихся в них файлов. В качестве примера файл text.txt может находиться сразу в нескольких директориях: /files и /docs, но две копии text.txt не могут существовать в одной директории. Также, для доступа к text.txt извн, мы должны добавить имя директории перед именем файла используя разделитель (/files /text.txt). Такой же принцип распространяется и на пространства имен.
В PHP пространства имен используются для решения двух проблем:
Пример использования.
Допустим, у нас такая файловая структура:
-- 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\AppControoler.php;
?>
Если у Вас есть вопросы, жалобы или предложения по работе нашей компании, напишите нам Нам важно любое мнение. Спасибо.