PSR-4
PSR-4 — стандарт автозагрузки
Суть в одном предложении
PSR-4 определяет, как пространства имён (namespace) и имена классов сопоставляются с путями к файлам в проекте.
Краткое определение
PSR-4 — стандарт PHP-FIG для автозагрузки классов: префикс неймспейса отображается на базовый каталог, остальная часть неймспейса и имя класса — на путь к файлу и имя файла. Один префикс — одна базовая директория.
Оригинал и перевод
- Язык: английский
- Оригинал: PSR-4
- Буквальный перевод: стандарт автозагрузки (по смыслу документа)
Синонимы и варианты написания
- PSR-4
- PSR4
Происхождение
Принят PHP-FIG как замена PSR-0. Composer генерирует автозагрузчик по правилам PSR-4 из секции autoload в composer.json; современные PHP-фреймворки и библиотеки опираются на PSR-4.
Где используется
- Composer (autoload, autoload-dump)
- Современные PHP-фреймворки и библиотеки
- Bitrix (локальная автозагрузка из
/local/php_interface/и т.п. по аналогичным правилам)
Когда это важно
При добавлении классов и подключении библиотек: соответствие неймспейса и пути файла PSR-4 позволяет автозагрузчику найти класс без ручных require. Нарушение правил приводит к «class not found».
Подробное объяснение
Задаётся соответствие «префикс неймспейса → базовый каталог». Например, App\Services → src/Services. Класс App\Services\OrderService ищется в файле src/Services/OrderService.php. Имя файла должно совпадать с именем класса; один класс — один файл. Имена классов и неймспейсов по PSR-1 (например, CamelCase).
Аналоги и связанные термины
- PSR-1 — базовый стандарт кода; имена классов и структура файлов согласуются с PSR-4
- Autoload — механизм, который PSR-4 стандартизирует
- Composer — инструмент, генерирующий автозагрузчик по PSR-4
- Namespace — пространства имён, отображаемые на пути по PSR-4
Пример использования
«В composer.json указали autoload PSR-4: App\\ → src/ — класс App\Services\OrderService лежит в src/Services/OrderService.php.»
Мини‑FAQ
- PSR-0 и PSR-4 — в чём разница?
Ответ: PSR-0 устарел. В PSR-4 префикс неймспейса может быть не привязан к подпапкам (например,Vendor\Package→ одна базовая папка), что короче и гибче.
Смотри также
- Autoload
- Namespace
- PSR-1
- Composer