Menu
Coddy logo textTech

Автозагрузчик Composer

Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy — урок 13 из 91.

Написание собственного автозагрузчика работает, но реальные PHP-проекты используют Composer для автоматической обработки автозагрузки. Composer считывает конфигурацию вашего проекта и генерирует оптимизированный автозагрузчик, который соответствует стандартам PSR-4.

Конфигурация находится в файле composer.json в корне вашего проекта. Вот как вы определяете правила автозагрузки:

{
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

Это сообщает Composer, что любой класс, начинающийся с App\, должен загружаться из директории src/. После настройки Composer генерирует файлы автозагрузчика в директории vendor/.

Чтобы использовать автозагрузчик Composer, вам нужна всего одна строка в начале вашего входного файла:

<?php
require 'vendor/autoload.php';

use App\Models\User;
use App\Services\Logger;

$user = new User("Alice");
$logger = new Logger();

Этот единственный оператор require обрабатывает всю загрузку классов для всего вашего проекта. При необходимости вы можете определить несколько сопоставлений пространств имен:

{
    "autoload": {
        "psr-4": {
            "App\\": "src/",
            "Tests\\": "tests/"
        }
    }
}

Ключевой момент: Автозагрузчик Composer устраняет необходимость ручного подключения файлов и обеспечивает согласованную загрузку классов во всем проекте. Это стандартный подход, используемый практически всеми современными PHP-приложениями и фреймворками.

challenge icon

Задание

Легко

Давайте создадим небольшое приложение, которое использует подход автозагрузки Composer для организации классов в нескольких файлах. Вы смоделируете, как реальный PHP-проект структурирует свой код с использованием пространств имен PSR-4 и центрального автозагрузчика.

Вы создадите четыре файла, которые работают вместе:

  • src/Models/Product.php — Определите класс Product в пространстве имен App\Models. У него должны быть свойства public $name и public $price, конструктор, который принимает и устанавливает оба значения, и метод getInfo(), который возвращает "[name]: $[price]".
  • src/Models/Customer.php — Определите класс Customer в пространстве имен App\Models. У него должно быть свойство public $name, конструктор, который принимает и устанавливает имя, и метод greet(), который возвращает "Welcome, [name]!".
  • vendor/autoload.php — Создайте простой автозагрузчик, используя spl_autoload_register, который имитирует поведение Composer. Он должен сопоставлять префикс пространства имен App\ с директорией src/, преобразуя разделители пространств имен в разделители директорий и добавляя .php для загрузки соответствующего файла.
  • index.php — Это ваш файл точки входа. Подключите автозагрузчик из vendor/autoload.php одной строкой, затем используйте ключевое слово use для импорта как App\Models\Product, так и App\Models\Customer. Создайте объект Product с именем "Laptop" и ценой 999, а также объект Customer с именем "Alice". Выведите результат вызова greet() для клиента и getInfo() для продукта (каждый на новой строке).

Ключевая концепция здесь заключается в том, что вашему index.php требуется только один оператор require для загрузки автозагрузчика — после этого все классы загружаются автоматически при их использовании. Именно так работают современные PHP-фреймворки и приложения с Composer.

Шпаргалка

Composer автоматизирует загрузку классов, считывая конфигурационный файл composer.json и создавая оптимизированный автозагрузчик, соответствующий стандартам PSR-4.

Определите правила автозагрузки в composer.json:

{
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

Это сопоставляет пространство имен App\ с директорией src/. Composer генерирует файлы автозагрузчика в директории vendor/.

Используйте автозагрузчик Composer с помощью одной инструкции require:

<?php
require 'vendor/autoload.php';

use App\Models\User;
use App\Services\Logger;

$user = new User("Alice");
$logger = new Logger();

При необходимости определите несколько сопоставлений пространств имен:

{
    "autoload": {
        "psr-4": {
            "App\\": "src/",
            "Tests\\": "tests/"
        }
    }
}

Автозагрузчик Composer избавляет от ручного подключения файлов и является стандартным подходом в современных PHP-приложениях.

Попробуйте сами

<?php
// TODO: Подключите автозагрузчик из vendor/autoload.php

// TODO: Используйте ключевое слово 'use' для импорта App\Models\Product

// TODO: Используйте ключевое слово 'use' для импорта App\Models\Customer

// TODO: Создайте Product с именем "Laptop" и ценой 999

// TODO: Создайте Customer с именем "Alice"

// TODO: Выведите результат greet() клиента

// TODO: Выведите результат getInfo() продукта
?>
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование