Статья

📘 Глава 25. Автозагрузка классов и Composer. PSR-4

🧠 Что такое автозагрузка?

Автозагрузка позволяет не писать require или include вручную каждый раз, когда нужен новый класс. PHP сам загрузит нужный файл при обращении к классу.


⚙️ До автозагрузки:

require 'App/Controllers/HomeController.php';
$controller = new HomeController();

⚙️ С автозагрузкой:

$controller = new HomeController(); // PHP сам подключит нужный файл

📦 Composer — менеджер пакетов для PHP

Composer управляет:

  • Зависимостями (подключение библиотек)

  • Автозагрузкой классов

  • Стандартами структуры проекта


🔧 Установка Composer (если ещё нет)

https://getcomposer.org

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, как их запускать и зачем это вообще нужно.

PHP
Для ответа вы можете авторизоваться