🧱 Суть
Composer – это менеджер зависимостей для PHP.
Он позволяет:
- устанавливать сторонние библиотеки
- управлять версиями пакетов
- автоматически загружать классы через Autoload
- фиксировать окружение проекта
Пример:
composer require monolog/monologПосле установки библиотека становится доступной в проекте.
📦 Проблема
1. Ручное подключение библиотек
Раньше зависимости подключали вручную:
require 'library/Logger.php';
require 'library/Database.php';Проблемы:
- сложно поддерживать
- легко забыть файл
- трудно обновлять версии
2. Конфликты версий
Например:
Проект A → библиотека v1.5
Проект B → библиотека v2.0Без менеджера зависимостей сложно контролировать совместимость.
3. Нет единого способа загрузки классов
Каждая библиотека могла иметь свою структуру:
lib/
classes/
src/
includes/Composer решает это через единый Autoload.
✅ Решение
Использовать Composer для:
- установки пакетов
- хранения зависимостей
- автозагрузки классов
- управления версиями
💻 Код
Установка Composer
Проверка установки:
composer --versionРезультат:
Composer version 2.xСоздание проекта
Инициализация Composer:
composer initПосле этого создаётся файл:
composer.jsoncomposer.json
Главный файл конфигурации Composer.
Пример:
{
"require": {
"monolog/monolog": "^3.0"
}
}Здесь:
monolog/monolog– название пакета.
^3.0– разрешённая версия.
Установка зависимостей
После создания composer.json:
composer installComposer:
- читает
composer.json - скачивает пакеты
- создаёт папку
vendor - создаёт Autoload
Папка vendor
После установки появляется:
project/
│
├── src/
│
├── vendor/
│ ├── autoload.php
│ └── monolog/
│
└── composer.jsonvendor содержит:
- установленные библиотеки
- служебные файлы Composer
- автозагрузчик
Подключение Autoload
В начале приложения:
require_once __DIR__ . '/vendor/autoload.php';После этого можно использовать классы:
use Monolog\Logger;
$log = new Logger('app');Без дополнительных require.
Добавление пакетов
Команда:
composer require vendor/packageНапример:
composer require monolog/monologComposer автоматически:
- скачает пакет
- добавит его в
composer.json - обновит
composer.lock
Удаление пакета
composer remove vendor/packageНапример:
composer remove monolog/monologcomposer.lock
При установке создаётся:
composer.lockОн фиксирует конкретные версии:
{
"name": "monolog/monolog",
"version": "3.0.0"
}Зачем нужен lock-файл?
composer.json:
какие версии можно использовать
composer.lock:
какие версии реально установлены
Пример:
У разработчика:
monolog 3.0.0У другого:
monolog 3.2.1Если нет composer.lock, окружения могут отличаться.
install vs update
composer install
Используется обычно:
- при клонировании проекта
- на сервере
- в CI
Берёт версии из:
composer.lockcomposer update
Обновляет зависимости:
composer updateМеняет:
- версии пакетов
- composer.lock
Используется осторожно.
Версии пакетов
Composer использует Semantic Versioning:
MAJOR.MINOR.PATCHПример:
3.2.1Ограничения версий
Точная версия
{
"package": "1.5.0"
}Только эта версия.
Любая версия внутри major
{
"package": "^1.5"
}Разрешает:
1.5.0
1.6.0
1.9.0Но не:
2.0.0Любые минорные обновления
{
"package": "~1.5"
}Разрешает:
1.5.xAutoload через Composer
Composer умеет загружать собственные классы проекта.
Пример структуры:
src/
└── User.phpФайл:
namespace App;
class User
{
}composer.json:
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}После изменения:
composer dump-autoloadТеперь:
use App\User;
$user = new User();работает автоматически.
Полезные команды
Установка зависимостей:
composer installОбновление:
composer updateДобавление пакета:
composer require package/nameУдаление:
composer remove package/nameОбновление Autoload:
composer dump-autoloadПроверка зависимостей:
composer showЧто обычно хранится в проекте
В Git добавляют:
composer.json
composer.lockНе добавляют:
vendor/Потому что зависимости можно восстановить:
composer install🎯 Вывод
- Composer – стандартный менеджер зависимостей PHP
composer.jsonописывает нужные пакетыcomposer.lockфиксирует конкретные версииvendor/содержит установленные библиотекиautoload.phpавтоматически подключает классы- Composer использует PSR-4 для загрузки собственного кода
- в современных PHP-проектах ручные
requireпочти не используются