Появились функции для каталога, проверки оценки и форматирования. Если сложить их все в index.php, файл быстро станет похож на ящик, куда без разбора бросают инструменты. Разделим проект на папки, а Composer научит PHP автоматически находить наши классы.

Что делает Composer

Composer — менеджер зависимостей PHP. Он устанавливает библиотеки, фиксирует их версии в файлах проекта и может автоматически подключать ваши классы. Даже если проект пока не использует сторонние пакеты, автозагрузка избавляет от ручного require для каждого класса.

Создаём описание проекта

В корне reading-log выполните:

composer init

Мастер создаст файл composer.json. Добавьте в него правило PSR-4, связывающее пространство имён App\ с папкой src/:

{
  "name": "example/reading-log",
  "autoload": {
    "psr-4": {
      "App\\": "src/"
    }
  }
}

После изменения правила пересоберите карту автозагрузки:

composer dump-autoload

Composer создаст каталог vendor/ и файл vendor/autoload.php. Этот каталог не редактируют вручную и обычно не добавляют в Git: он создаётся командой установки из описания зависимостей.

Первый класс в своём пространстве имён

Создайте файл src/Book.php:

<?php
declare(strict_types=1);

namespace App;

final class Book
{
    public function __construct(
        public string $title,
        public int $year,
    ) {}
}

Строка namespace App; задаёт пространство имён — как адрес класса внутри проекта. Имя App\Book не конфликтует с таким же коротким именем в другой библиотеке. PSR-4 сопоставляет этот класс файлу src/Book.php.

В public/index.php подключите автозагрузчик и используйте класс:

<?php
declare(strict_types=1);

require dirname(__DIR__) . '/vendor/autoload.php';

$book = new App\Book(title: 'Дюна', year: 1965);
echo $book->title;

Что хранить в Git

  • composer.json — названия зависимостей и правила проекта.
  • composer.lock — точные выбранные версии, если файл создан Composer.
  • src/ и public/ — ваш код.
  • vendor/ — обычно исключают: его можно восстановить.

В разных типах приложений команда Composer может отличаться: install использует зафиксированные версии из lock-файла, а update пересчитывает версии в пределах ограничений. Для воспроизводимого проекта обычно добавляют оба файла, composer.json и composer.lock.

Проверьте структуру

Запустите страницу и создайте объект App\Book. Если класс не находится, проверьте три совпадения: имя пространства имён, путь из PSR-4 и имя файла с учётом регистра. На некоторых компьютерах регистр букв в имени файла критичен.

В следующей части дадим книге собственное поведение и правила создания. Класс нужен не ради «объектного программирования», а чтобы нельзя было случайно создать запись без названия или передать год текстом.

Часть 6 из 16.

← Часть 5: Функции PHP: типы аргументов, return и полезные правила · Часть 7: Классы и объекты PHP: создаём модель книги →

Документация