# Подпространства имен

Пусть теперь у нас есть более сложная ситуация: для админа нужно сделать два класса `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`.

← →
↑