Глава 14. Пространства имён в PHP
Пространства имён появились в PHP для решения простой, но важной проблемы: в большом проекте слишком легко получить конфликт имён классов, функций и констант. Если два модуля создают класс User, PHP не сможет понять, какой именно класс нужно использовать. Пространства имён позволяют разложить код по логическим областям и сделать имена уникальными.
ShopUserModel, ForumUserModel, AdminUserModel. Сегодня чаще используют короткие имена классов и размещают их в пространствах имён: AppShopUser, AppForumUser.Объявление namespace
Пространство имён объявляется в начале PHP-файла. До него не должно быть вывода HTML или пробелов вне PHP-кода.
<?php
namespace AppModels;
class User
{
public function getName()
{
return 'Алексей';
}
}
Подключение класса через use
Чтобы не писать полное имя класса каждый раз, используется оператор use. Он говорит PHP, какой класс мы хотим использовать в текущем файле.
<?php
use AppModelsUser;
$user = new User();
Полное имя класса
Класс можно создать и через полное имя. Обратный слеш в начале означает, что путь начинается от глобального пространства имён.
$user = new AppModelsUser();
Псевдонимы
Если в одном файле нужны два класса с одинаковым коротким именем, можно задать псевдоним.
use AppAdminUser as AdminUser;
use AppSiteUser as SiteUser;
$admin = new AdminUser();
$siteUser = new SiteUser();
Связь с PSR-4
В современных проектах namespace обычно связан с автозагрузкой PSR-4. Например, namespace App может соответствовать каталогу src/. Тогда класс AppServiceMailer будет лежать в файле src/Service/Mailer.php.
{
"autoload": {
"psr-4": {
"App\": "src/"
}
}
}
Практический пример структуры
src/
Controller/
UserController.php
Model/
User.php
Service/
AuthService.php
В такой структуре сразу видно назначение файла. Контроллер принимает запрос, модель описывает данные, сервис содержит бизнес-логику.
Типичные ошибки
- Объявлять namespace не в начале файла.
- Смешивать несколько несвязанных классов в одном файле.
- Использовать namespace, но не настроить автозагрузку.
- Давать пространствам имён слишком длинные и бессмысленные названия.
Итоги
Пространства имён помогают организовать проект и избежать конфликтов. Их стоит использовать вместе с Composer и PSR-4. Даже если проект небольшой, правильная структура классов делает код понятнее и упрощает дальнейшее развитие.