Урок 38: Работа с PHP Composer

В 38 уроке мы погрузимся в мир PHP Composer. Это инструмент, который изменит ваш подход к разработке на PHP. Composer не просто «менеджер пакетов», это ваш надежный помощник, который автоматизирует рутину, управляет зависимостями и позволяет легко интегрировать сторонние библиотеки. Если вы до сих пор копировали файлы вручную или писали бесконечные include, этот урок станет для вас откровением.

Что такое Composer?

Composer это система управления зависимостями для PHP. Представьте, что вы хотите использовать готовую библиотеку для работы с API ВКонтакте или для отправки email. Раньше вам пришлось бы вручную скачивать её код, проверять совместимость версий, подключать файлы… Composer делает это за вас:

  • Устанавливает пакеты (библиотеки) автоматически.
  • Управляет их версиями.
  • Автогенерирует загрузчик классов.
  • Позволяет легко обновлять зависимости.

Пример из жизни:
Допустим, вы пишете проект, где нужна библиотека для работы с Excel. Без Composer вы ищете её в интернете, скачиваете, копируете в папку libs, подключаете через require_once. Если позже потребуется обновить библиотеку — придется делать всё заново. С Composer вы просто запускаете команду composer require phpoffice/phpspreadsheet, и всё готово.

Установка Composer

Шаг 1: Установка на Windows

  1. Скачайте установщик с официального сайта.
  2. Запустите Composer-Setup.exe.
  3. Выберите версию PHP (убедитесь, что PHP добавлен в PATH).
  4. Проверьте установку:
    bash
    composer --version

    Вы должны увидеть что-то вроде Composer version 2.6.6.

Шаг 2: Установка на Linux/macOS

  1. Откройте терминал и выполните:
    bash
    php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    php composer-setup.php
    php -r "unlink('composer-setup.php');"
  2. Перенесите файл в глобальную директорию:
    bash
    sudo mv composer.phar /usr/local/bin/composer
  3. Проверьте версию:
    bash
    composer --version

Первый проект с Composer

Давайте создадим проект с нуля.

  1. Создайте папку my_project и перейдите в неё:
    bash
    mkdir my_project && cd my_project
  2. Инициализируйте Composer:
    bash
    composer init

    Composer задаст несколько вопросов (название проекта, описание, зависимости). Пока можно нажимать Enter, оставляя значения по умолчанию.

  3. После инициализации в папке появится файл composer.jsonэто конфигурация вашего проекта. Пример содержимого:
    json
    {
        "name": "maxim/my_project",
        "require": {}
    }

Подключение сторонних библиотек

Установка Guzzle HTTP-клиента

Допустим, мы хотим отправлять HTTP-запросы. Вместо написания своего кода используем библиотеку Guzzle.

  1. Установите пакет:
    bash
    composer require guzzlehttp/guzzle

    Composer скачает Guzzle и все его зависимости. Обратите внимание на изменения в composer.json:

    json
    {
        "require": {
            "guzzlehttp/guzzle": "^7.0"
        }
    }
  2. Создайте файл index.php и используйте Guzzle:
    <?php
    require 'vendor/autoload.php';
    
    use GuzzleHttp\Client;
    
    $client = new Client();
    $response = $client->get('https://api.github.com/users/max-gabov');
    echo $response->getBody();

    Запустите скрипт — вы получите данные моего GitHub-аккаунта!

Работа с Carbon для дат

Установим Carbon, удобную библиотеку для работы с датами:

bash
composer require nesbot/carbon

Использование:

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

use Carbon\Carbon;

echo Carbon::now()->addDays(5); // Вывод даты через 5 дней

Автозагрузка своих классов

Composer умеет автоматически подключать ваши классы через PSR-4.

  1. Создайте папку src и добавьте в неё класс User.php:
    <?php
    namespace MyProject;
    
    class User {
        public function __construct() {
            echo "Пользователь создан!";
        }
    }
  2. Обновите composer.json, добавив автозагрузку:
    {
        "autoload": {
            "psr-4": {
                "MyProject\\": "src/"
            }
        }
    }
  3. Выполните команду:
    composer dump-autoload
  4. Теперь используйте класс в коде:
    <?php
    require 'vendor/autoload.php';
    
    $user = new MyProject\User(); // Выведет "Пользователь создан!"

Практические задачи

Задача 1: Установите библиотеку для работы с JSON

Установите пакет symfony/json-encoder и напишите скрипт, который кодирует массив ['name' => 'Максим', 'course' => 'PHP'] в JSON.

Решение:

bash
composer require symfony/serializer
php
<?php
require 'vendor/autoload.php';

use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Serializer;

$serializer = new Serializer([], [new JsonEncoder()]);
$data = $serializer->encode(['name' => 'Максим', 'course' => 'PHP'], 'json');
echo $data; // {"name":"Максим","course":"PHP"}

Задача 2: Создайте свой пакет

  1. Создайте класс Calculator в папке src/Math.
  2. Настройте автозагрузку через composer.json.
  3. Используйте класс для вычисления суммы 10 + 5.

Решение:

php
// src/Math/Calculator.php
namespace MyProject\Math;

class Calculator {
    public function add($a, $b) {
        return $a + $b;
    }
}
json
// composer.json
"autoload": {
    "psr-4": {
        "MyProject\\": "src/"
    }
}
bash
composer dump-autoload
php
// index.php
$calc = new MyProject\Math\Calculator();
echo $calc->add(10, 5); // 15

Частые ошибки новичков

  1. Забыли подключить vendor/autoload.php.
    Всегда добавляйте require 'vendor/autoload.php'; в начало файла.
  2. Неправильный namespace.
    Если класс находится в src/Logger/FileLogger.php, его namespace должен быть MyProject\Logger.
  3. Игнорирование composer.lock.
    Не коммитьте vendor/, но обязательно добавляйте composer.lock в Git. Это гарантирует, что все разработчики используют одинаковые версии пакетов.

Composer это инструмент для любого PHP-разработчика. Он экономит часы времени, избавляет от «dependency hell» и открывает доступ к тысячам готовых решений. Потратьте время на эксперименты с Packagist, подключайте библиотеки и не бойтесь писать свои пакеты.

Продолжайте обучение —  полный курс по PHP для начинающих