Подпространства имен в ООП в PHP
Пусть теперь у нас есть более сложная ситуация:
для админа нужно сделать два класса Page
- один с данными страницы, а второй - с представлением
этих данных. Пусть первый класс находится
в файле /admin/data/page.php, а второй
- в файле /admin/view/page.php.
В предыдущих уроках мы уже решили, что все классы из папки
admin будут относится к пространству
имен Admin. Однако, теперь в этом
самом пространстве у нас конфликт двух классов.
Для решения проблемы можно сделать дополнительные
подпространства имен. Например, можно сделать
пространство имен Admin, а в нем подпространства
Data и View. В таком случае
имена этих подпространств просто записываются
через обратный слеш - как при задании пространства
имен, так и при создании объекта класса.
Здесь следует уточнить, что уровень вложенности подпространств не ограничен (можно создавать под под пространства в подпространствах и так далее).
Итак, давайте доделаем наш описанный выше
пример. Для класса Page из файла /admin/data/page.php
укажем пространство имен Admin\Data:
<?php
namespace Admin\Data;
class Page
{
}
?>
Для класса Page из файла /admin/view/page.php
укажем пространство имен Admin\View:
<?php
namespace Admin\View;
class Page
{
}
?>
Создадим объекты наших классов:
<?php
require_once '/admin/data/page.php';
require_once '/admin/view/page.php';
$adminDataPage = new \Admin\Data\Page;
$adminViewPage = new \Admin\View\Page;
?>
Пусть у вас есть папка modules/cart.
Сделайте так, чтобы все классы из этой папки
относились к пространству имен
Modules\Cart.
Пусть у вас есть папка modules/shop/cart/.
Сделайте так, чтобы все классы из этой папки
относились к пространству имен
Modules\Shop\Cart.