Урок по треку PHP 6 мин

Composer и стандарты PSR

Версии и lock-файл, автозагрузка PSR-4, стандарты PHP-FIG.

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

composer.json и composer.lock

  • composer.json: какие пакеты и в каких диапазонах версий нужны.
  • composer.lock: какие точные версии установлены, с хешами. Для приложения коммитится обязательно.
composer require guzzlehttp/guzzle:^7.9   # добавить пакет
composer install                          # поставить строго по lock
composer update vendor/package            # обновить и переписать lock
composer install --no-dev --optimize-autoloader  # продакшен

На сервере и в CI только install. update делается осознанно, в отдельной ветке, с прогоном тестов.

Ограничения версий

ЗаписьДиапазон
^1.2>=1.2.0 <2.0.0
^0.3>=0.3.0 <0.4.0
~1.2>=1.2.0 <2.0.0
~1.2.3>=1.2.3 <1.3.0
1.2.*>=1.2.0 <1.3.0

Composer ставит одну версию каждого пакета на проект: два пакета с несовместимыми требованиями к общей зависимости вызовут конфликт. Диагностика: composer why-not vendor/pkg 2.0. Версию PHP продакшена задают в config.platform.php, чтобы lock-файл подходил серверу.

Автозагрузка PSR-4

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

Класс App\Billing\Invoice ищется в src/Billing/Invoice.php: префикс отрезается, пространства имён становятся каталогами. Для продакшена --optimize-autoloader строит classmap, а --classmap-authoritative ещё и запрещает поиск на диске.

Стандарты PSR

  • PSR-1, PSR-12 и PER Coding Style: стиль кода (PHP-CS-Fixer, PHP_CodeSniffer).
  • PSR-3: логгер. PSR-4: автозагрузка.
  • PSR-6, PSR-16: кеш. PSR-7, PSR-15, PSR-17, PSR-18: HTTP-сообщения, middleware, фабрики, клиент.
  • PSR-11: контейнер. PSR-14: события. PSR-20: часы.

Смысл интерфейсных PSR: библиотека зависит от Psr\Log\LoggerInterface, а не от Monolog, и работает в любом фреймворке.

Полезное

  • composer audit в CI: известные уязвимости зависимостей.
  • composer outdated, composer bump.
  • scripts для своих команд: composer test, composer lint.
  • Приватные пакеты: repositories и токены в auth.json, который не коммитят.

Частые ошибки

  • composer update на продакшене.
  • lock-файл не в репозитории.
  • Dev-зависимости на сервере.
  • Забытый dump-autoload после ручного изменения карты автозагрузки.

Что спросят на собесе

  • Зачем нужен composer.lock и чем install отличается от update?
  • Что означает ^1.2 и ~1.2.3?
  • Как работает PSR-4?
  • Какие PSR вы знаете и зачем они?
  • Что делать при конфликте версий зависимостей?

Закрепите за 5 минут

После урока в тренажёре 3-5 проверочных вопросов, дальше модуль уходит в повторения.