PSR-4 — это стандарт автозагрузки классов в PHP, который описывает, как файлы классов должны соотноситься с пространствами имён. Вместе с Composer это создаёт мощную систему управления зависимостями.
Что такое PSR-4 и зачем он нужен?
До появления автозагрузки разработчики использовали множество require и include, что было неудобно и трудоёмко. PSR-4 решает эту проблему, позволяя загружать классы автоматически по их пространству имён.
Настройка PSR-4 через Composer
В файле composer.json нужно указать секцию autoload:
{
'name': 'myapp/php-project',
'description': 'Пример PSR-4 автозагрузки',
'autoload': {
'psr-4': {
'App\\': 'src/'
},
'require': {}
}Это означает, что классы из пространства имён App будут находиться в папке src/.
Структура папок и файлов
PSR-4 строго определяет соответствие между пространством имён и путём к файлу:
- Класс App\User\Profile → файл src/User/Profile.php
- Класс App\Http\Controllers\AuthController → файл src/Http/Controllers/AuthController.php
- Класс App\Models\UserModel → файл src/Models/UserModel.php
Пример структуры проекта
project/
├── composer.json
├── src/
│ ├── Http/
│ │ ├── Controllers/
│ │ │ └── AuthController.php
│ │ └── Middleware/
│ │ └── AuthMiddleware.php
│ ├── Models/
│ │ └── UserModel.php
│ └── Services/
│ └── EmailService.php
├── tests/
│ └── UserModelTest.php
└── public/
└── index.phpСоздание файлов классов
Класс UserModel в src/Models/UserModel.php
<?php
namespace App\Models;
class UserModel {
private \PDO db;
public function __construct(\PDO db) {
this->db = db;
public function getUsers(): array {
stmt = this->db->query('SELECT * FROM users');
return stmt->fetchAll(\PDO::FETCH_ASSOC);
?>Класс AuthController в src/Http/Controllers/AuthController.php
userModel=userModel;
this−>emailService=emailService;
public function login(string
email,stringpassword): bool {
users=this->userModel->getUsers();
// Логика аутентификации
return true;
?>Автозагрузка в index.php
login('user@example.com', 'password');
?>Оптимизация автозагрузки
Composer может сгенерировать оптимизированный автозагрузчик для продакшена:
composer dump-autoload --optimize
composer dump-autoload --classmap-authoritativeПространства имён и use
Пространства имён помогают избегать конфликтов классов. Используйте use для импорта классов:
userModel=userModel;
this−>emailService=emailService;
this−>logger=logger;
?>Итог
PSR-4 и Composer делают организацию PHP-кода простой и логичной. Автозагрузка по стандарту PSR-4 — это современный подход, который используется во всех крупных фреймворках.