📘 Глава 25. Автозагрузка классов и Composer. PSR-4
🧠 Что такое автозагрузка?
Автозагрузка позволяет не писать require
или include
вручную каждый раз, когда нужен новый класс. PHP сам загрузит нужный файл при обращении к классу.
⚙️ До автозагрузки:
require 'App/Controllers/HomeController.php';
$controller = new HomeController();
⚙️ С автозагрузкой:
$controller = new HomeController(); // PHP сам подключит нужный файл
📦 Composer — менеджер пакетов для PHP
Composer управляет:
-
Зависимостями (подключение библиотек)
-
Автозагрузкой классов
-
Стандартами структуры проекта
🔧 Установка Composer (если ещё нет)
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
🛠 Создание composer.json
composer init
Вы увидите пошаговый мастер создания файла composer.json
.
Пример:
{
"name": "yourname/project",
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
🔁 Автозагрузка по PSR-4
Пример:
// src/Controllers/HomeController.php
namespace App\Controllers;
class HomeController {
public function index() {
echo "Home page";
}
}
Если composer.json
содержит:
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
То вызов:
use App\Controllers\HomeController;
$controller = new HomeController();
…автоматически подключит файл src/Controllers/HomeController.php
.
✅ Активация автозагрузки
После создания или изменения composer.json
, выполни:
composer dump-autoload
И в index.php
:
require 'vendor/autoload.php';
Теперь Composer будет автоматически загружать классы, соответствующие PSR-4.
📚 PSR-4 — Стандарт автозагрузки
-
Пространства имён соответствуют структуре папок
-
Префикс пространства имён (например
App\
) сопоставляется с базовой папкой (напримерsrc/
) -
Все классы должны быть в одном файле, один класс — один файл
🧪 Пример проекта:
project/
├── src/
│ ├── Controllers/
│ │ └── HomeController.php
│ └── Models/
│ └── User.php
├── vendor/
│ └── (Composer libraries)
├── composer.json
└── public/
└── index.php
composer.json
:
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
public/index.php
:
require __DIR__ . '/../vendor/autoload.php';
use App\Controllers\HomeController;
$controller = new HomeController();
$controller->index();
📦 Установка внешней библиотеки
composer require monolog/monolog
Теперь можно использовать:
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$log = new Logger('main');
$log->pushHandler(new StreamHandler(__DIR__.'/app.log', Logger::WARNING));
$log->warning('Something happened');
✅ Что ты усвоил:
-
Как Composer управляет зависимостями и автозагрузкой
-
Что такое PSR-4 и как устроена автозагрузка классов
-
Как структурировать PHP-проект по современным стандартам
⏭ В следующей главе:
Мы разберём тестирование кода в PHP — как писать юнит-тесты с помощью PHPUnit, как их запускать и зачем это вообще нужно.