Как настроить автозагрузку классов (autoload) в Composer?

«Как настроить автозагрузку классов (autoload) в Composer?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Настройка автозагрузки выполняется в секции autoload файла composer.json. Composer поддерживает несколько стандартов, основным из которых является PSR-4.

1. PSR-4 (рекомендуемый стандарт): Соответствие пространства имён структуре директорий.

{
    "autoload": {
        "psr-4": {
            "MyVendor\MyApp\": "src/"
        }
    }
}
  • "MyVendor\MyApp\": Префикс пространства имён. Двойной обратный слэш — экранирование для JSON.
  • "src/": Базовая директория относительно composer.json, где находятся классы.

Структура проекта:

project/
├── composer.json
└── src/
    ├── Controller/
    │   └── HomeController.php  // Класс: MyVendorMyAppControllerHomeController
    └── Model/
        └── User.php            // Класс: MyVendorMyAppModelUser

2. Classmap (для legacy-кода или не-PSR структур): Composer просканирует указанные директории и создаст карту всех найденных классов.

{
    "autoload": {
        "classmap": ["lib/", "app/Models/", "database/seeds/"]
    }
}

3. Files (для загрузки отдельных файлов, например, функций):

{
    "autoload": {
        "files": ["src/helpers.php"]
    }
}

После изменения composer.json необходимо обновить автозагрузчик:

# Эта команда сгенерирует/обновит файл vendor/autoload.php
composer dump-autoload
# Или с флагом -o для оптимизации (преобразует PSR-4/0 в classmap для повышения скорости)
composer dump-autoload -o

Использование в коде: Просто подключите сгенерированный файл в точке входа (например, index.php).

require __DIR__ . '/vendor/autoload.php';

// Теперь классы загружаются автоматически
$obj = new MyVendorMyAppControllerHomeController();