В 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
    <span class="token function">composer</span> <span class="token parameter variable">--version</span>
    Вы должны увидеть что-то вроде Composer version 2.6.6.

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

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

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

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

  1. Создайте папку my_project и перейдите в неё: bash
    <span class="token function">mkdir</span> my_project <span class="token operator">&&</span> <span class="token builtin class-name">cd</span> my_project
  2. Инициализируйте Composer: bash
    <span class="token function">composer</span> init
    Composer задаст несколько вопросов (название проекта, описание, зависимости). Пока можно нажимать Enter, оставляя значения по умолчанию.
  3. После инициализации в папке появится файл composer.jsonэто конфигурация вашего проекта. Пример содержимого: json
    <span class="token punctuation">{</span>
        <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"maxim/my_project"</span><span class="token punctuation">,</span>
        <span class="token property">"require"</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
    <span class="token punctuation">}</span>

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

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

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

  1. Установите пакет: bash
    <span class="token function">composer</span> require guzzlehttp/guzzle
    Composer скачает Guzzle и все его зависимости. Обратите внимание на изменения в composer.json: json
    <span class="token punctuation">{</span>
        <span class="token property">"require"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
            <span class="token property">"guzzlehttp/guzzle"</span><span class="token operator">:</span> <span class="token string">"^7.0"</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">}</span>
  2. Создайте файл index.php и используйте Guzzle:
    <span class="token php language-php"><span class="token delimiter important"><?php</span>
    <span class="token keyword">require</span> <span class="token string single-quoted-string">'vendor/autoload.php'</span><span class="token punctuation">;</span>
    
    <span class="token keyword">use</span> <span class="token package">GuzzleHttp<span class="token punctuation"></span>Client</span><span class="token punctuation">;</span>
    
    <span class="token variable">$client</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Client</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$response</span> <span class="token operator">=</span> <span class="token variable">$client</span><span class="token operator">-></span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'https://api.github.com/users/max-gabov'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">echo</span> <span class="token variable">$response</span><span class="token operator">-></span><span class="token function">getBody</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
    Запустите скрипт и вы получите данные моего GitHub-аккаунта!

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

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

bash

<span class="token function">composer</span> require nesbot/carbon

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

<span class="token php language-php"><span class="token delimiter important"><?php</span>
<span class="token keyword">require</span> <span class="token string single-quoted-string">'vendor/autoload.php'</span><span class="token punctuation">;</span>

<span class="token keyword">use</span> <span class="token package">Carbon<span class="token punctuation"></span>Carbon</span><span class="token punctuation">;</span>

<span class="token keyword">echo</span> <span class="token class-name static-context">Carbon</span><span class="token operator">::</span><span class="token function">now</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token function">addDays</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Вывод даты через 5 дней</span></span>

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

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

  1. Создайте папку src и добавьте в неё класс User.php:
    <span class="token php language-php"><span class="token delimiter important"><?php</span>
    <span class="token keyword">namespace</span> <span class="token package">MyProject</span><span class="token punctuation">;</span>
    
    <span class="token keyword">class</span> <span class="token class-name-definition class-name">User</span> <span class="token punctuation">{</span>
        <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">__construct</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
            <span class="token keyword">echo</span> <span class="token string double-quoted-string">"Пользователь создан!"</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">}</span></span>
  2. Обновите composer.json, добавив автозагрузку:
    <span class="token punctuation">{</span>
        <span class="token property">"autoload"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
            <span class="token property">"psr-4"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
                <span class="token property">"MyProject"</span><span class="token operator">:</span> <span class="token string">"src/"</span>
            <span class="token punctuation">}</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">}</span>
  3. Выполните команду:
    <span class="token function">composer</span> dump-autoload
  4. Теперь используйте класс в коде:
    <span class="token php language-php"><span class="token delimiter important"><?php</span>
    <span class="token keyword">require</span> <span class="token string single-quoted-string">'vendor/autoload.php'</span><span class="token punctuation">;</span>
    
    <span class="token variable">$user</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name class-name-fully-qualified">MyProject<span class="token punctuation"></span>User</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Выведет "Пользователь создан!"</span></span>

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

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

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

Решение:

bash

<span class="token function">composer</span> require symfony/serializer

php

<span class="token php language-php"><span class="token delimiter important"><?php</span>
<span class="token keyword">require</span> <span class="token string single-quoted-string">'vendor/autoload.php'</span><span class="token punctuation">;</span>

<span class="token keyword">use</span> <span class="token package">Symfony<span class="token punctuation"></span>Component<span class="token punctuation"></span>Serializer<span class="token punctuation"></span>Encoder<span class="token punctuation"></span>JsonEncoder</span><span class="token punctuation">;</span>
<span class="token keyword">use</span> <span class="token package">Symfony<span class="token punctuation"></span>Component<span class="token punctuation"></span>Serializer<span class="token punctuation"></span>Serializer</span><span class="token punctuation">;</span>

<span class="token variable">$serializer</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Serializer</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token keyword">new</span> <span class="token class-name">JsonEncoder</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$data</span> <span class="token operator">=</span> <span class="token variable">$serializer</span><span class="token operator">-></span><span class="token function">encode</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'name'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'Максим'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'course'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'PHP'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'json'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">echo</span> <span class="token variable">$data</span><span class="token punctuation">;</span> <span class="token comment">// {"name":"Максим","course":"PHP"}</span></span>

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

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

Решение:

php

<span class="token comment">// src/Math/Calculator.php</span>
<span class="token keyword">namespace</span> <span class="token package">MyProject<span class="token punctuation"></span>Math</span><span class="token punctuation">;</span>

<span class="token keyword">class</span> <span class="token class-name-definition class-name">Calculator</span> <span class="token punctuation">{</span>
    <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">add</span><span class="token punctuation">(</span><span class="token variable">$a</span><span class="token punctuation">,</span> <span class="token variable">$b</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> <span class="token variable">$a</span> <span class="token operator">+</span> <span class="token variable">$b</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

json

<span class="token comment">// composer.json</span>
<span class="token property">"autoload"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
    <span class="token property">"psr-4"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
        <span class="token property">"MyProject"</span><span class="token operator">:</span> <span class="token string">"src/"</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

bash

<span class="token function">composer</span> dump-autoload

php

<span class="token comment">// index.php</span>
<span class="token variable">$calc</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name class-name-fully-qualified">MyProject<span class="token punctuation"></span>Math<span class="token punctuation"></span>Calculator</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">echo</span> <span class="token variable">$calc</span><span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 15</span>

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

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

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

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

Наверх