четверг, 27 февраля 2014 г.

Composer

Привет, мои педантичные программисты, любящие идеальный код. Сегодня я кратко расскажу, что надо делать для начала работы с Composer, а также как завести программы с неймспейсами на PHP 5.2.

Composer — это относительно новый и уже достаточно популярный менеджер зависимостей для PHP. Ты можешь описать, от каких библиотек зависит твой проект, и Composer установит нужные библиотеки за вас! Причём Composer — это не менеджер пакетов в классическом понимании. Да, он оперирует с сущностями, которые мы будем называть "пакетами" или библиотеками, но устанавливаются они внутрь каждого проекта отдельно, а не глобально (это одно из основных отличий от старого-доброго PEAR).

Подробнее на Хабре

Установка


Следуйте инструкциям на официальной странице.

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


Для скачивания кода нужных библиотек нам понадобится файл composer.json. Примеры такого файла можно посмотреть на хабре или у меня в блоге (чуть позже я выставлю пример для PayPal API SDK PHP, для которой я и пишу эту статью).

В папке с этим файлом выполняем команду composer update, но в Ubuntu может понадобится видоизменить команду до такой: ~/composer.phar update.

Это скачает все, что тебе необходимо. Теперь все, что тебе нужно, находится в папках lib/, и vendor/.

Несовместимости версий PHP


Следите, чтобы на сервере и у вас на локальной машине были максимально похожие версии PHP, чтоб достаточно было перекинуть эти две папки на сервер.

Несовместимость с PHP 5.2


Composer в большинстве случаев использует "инструмент" namespace для управления конфликтами. Но эта фича появилась только в PHP 5.3 и в предыдущих версиях никоим образом не реализована.

Если у тебя продакшен-сервер на базе PHP 5.2 и ниже, тебе крупно не повезло - придется переписывать SDK, или... исправлять несовместимые моменты.

Основные принципы следующие:

  • Избавиться от ключевых слов namespace во всех файлах проекта. Я на bash просто написал скрипт, который заменяет это слово на //namespace, т.е. закомментировал его. На этом этапе проследите, чтоб в разных библиотеках не повторялись названия классов. Если это случится - переименовать по всем библиотекам во избежание конфликтов.

  • Избавиться от ключевых слов use аналогичным образом - закомментировать.

  • Вместо use в PHP 5.2 используем require_once('путь к файлу php с классом'), но особым образом: все файлы должны подключаться в том порядке, в каком они будут вызываться кодом. Если в классе A используется класс B, то необходимо проследить, чтоб класс B был подключен раньше, чем класс A.

  • Избавиться от бекслешей \ в названиях классов, оставив только последнюю часть (например, class \A\B\C {} заменить на просто class C {}).

  • Удалить всё лишнее (папку vendor/ и др.), кроме папки lib/.



Скорее всего, это всё, что необходимо помнить. Для PayPal SDK этого было достаточно, но для других пакетов возможно потребуется что-нибудь еще...

Комментариев нет: