Menu
Coddy logo textTech

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

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

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

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

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

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

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

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

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

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

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

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

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

challenge icon

Задание

Легко

Давайте создадим небольшое приложение, использующее подход Composer к autoloading для организации class в нескольких file. Вы смоделируете структуру кода реального PHP-проекта с namespace PSR-4 и центральным autoloader.

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

  • src/Models/Product.php: Определите Product class в namespace App\Models. У него должны быть properties public $name и public $price, constructor, который accepts и устанавливает оба значения, а также method getInfo(), который returns "[name]: $[price]".
  • src/Models/Customer.php: Определите Customer class в namespace App\Models. У него должна быть property public $name, constructor, который accepts и устанавливает имя, а также method greet(), который returns "Welcome, [name]!".
  • vendor/autoload.php: Создайте простой autoloader с помощью spl_autoload_register, имитирующий поведение Composer. Он должен сопоставлять prefix namespace App\ с directory src/, преобразовывать separators namespace в separators directory и добавлять .php, чтобы загрузить нужный file.
  • index.php: Это ваш entry point file. Одной строкой выполните Require autoloader из vendor/autoload.php, затем используйте keyword use, чтобы импортировать оба класса: App\Models\Product и App\Models\Customer. Создайте Product с именем "Laptop" и ценой 999, а также Customer с именем "Alice". Print result вызова greet() у customer и getInfo() у product (каждый на отдельной строке).

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

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

<?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Проверьте себя

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор PHP