Выпуск №24 — PHP 7 “Request” Extension

PHP 7 “Request” Extension — нативное расширение для PHP 7 реализующие объекты ServerRequest и ServerResponse (не PSR-7!). Есть версия и на чистом PHP.

Другие новости: PhpStorm 2016.3, плагин для YouTrack, PHP 7.1.0 выйдет 1 декабря, PhpSpreadsheet — форк PHPExcel, видео с Symfony Moscow Meetup #10, FPCONF 3 декабря, HolyJS 11 декабря, подкаст «Пятиминутка React».

Привет мир!
Вы слушаете «Пятиминутку PHP», выпуск номер 24 — подкаст о новостях из мира PHP, интересных постах в блогах и современных подходах к разработке.

Paul M. Jones, известный по проектам Aura for PHP (фреймворк в виде набора супер-независимых компонент), автор подхода ADR (Action Domain Responder) и в целом активный участник PHP комьюнити выпустил странное: PHP расширение реализующее объекты Request и Response.

Все современные фреймворки имеют в своём активе абстракцию над запросом и ответом – классы Request и Response. Объект Request обычно содержит в себе данные из суперглобальных переменных $_GET, $_POST, $_FILES, $_SERVER и т.п. и удобные методы работы с ними, а объект Response позволяет манипулировать заголовками и телом ответа.

Существует даже стандарт PSR-7: HTTP message interfaces, который описывает интерфейсы http запроса и ответа. Многие фреймворки уже поддержали этот стандарт, кто-то через адаптеры к своим собственным реализациям, кто-то нативно. Кстати, я делал специальный выпуск Пятиминутки PHP №2 исключительно о PSR-7 – послушайте!

Так вот Paul Jones в кооперации с John Boer выпустил нативное расширение для PHP, которое реализует объекты ServerRequest и ServerResponse, и, внимание, они несовместимы с PSR-7! В комментариях к блог-посту с анонсом сразу посыпались вопросы: -как? -почему? Чёткого ответа нет, но если посмотреть на документацию, то он напрашивается сам собой. Этот проект ставит перед собой гораздо менее амбициозные цели. Напомню, что PSR-7 определяется как HTTP message interfaces, т.е. набор интерфейсов для описания HTTP запросов и ответов — серьёзный проект учитывающий спецификацию HTTP и позволяющий абстрагироваться от HTTP не только в классическом случае, когда из браузера на сервер приходит запрос, но и в случае, когда само PHP приложение выступает в качестве HTTP клиента, выполняя запрос к внешнему ресурсу.

В противоположность этому, классы ServerRequest и ServerResponse – гораздо более простые по своему устройству и по набору методов обёртки над суперглобальными переменными PHP, упрощение всего что только можно.

Формально проект в статусе Alpha 2 (первая альфа была пару недель назад), но судя по коммитам работа идёт уже пару месяцев. Расширение совместимо только с PHP 7 и написано на Си (никакого зефира). Для пользователей PHP версии 5.x предлагается аналогичная реализация на чистом PHP.

Для каких же проектов подойдут данные классы? Очевидно, если вы используете какой-либо фреймворк, пусть даже не самый новый, у вас уже есть аналогичные Request и Response обёртки.

Если вы хотите начать какой-то проект с чистого листа без фреймворков и собрать свою собственную архитектуру из популярных пакетов, то, скорее всего, вам стоит взять одну из реализаций PSR-7 – так будет проще интегрировать различные библиотеки, собирая свой конструктор.

Наконец, если у вас есть старый legacy проект без абстракций над запросом и ответом, который вы поддерживаете и потихоньку рефакторите – вот тут новые классы от Paul M. Jones могли бы подойти! С той лишь оговоркой, что нативное расширение работает только с PHP 7, и, это скорее всего не ваш legacy случай. Значит вам придётся брать PHP вариант.

Версия с применимостью в legacy проекте мне кажется наиболее вероятной, т.к. сам Paul M. Jones известный любитель этого дела — он написал целую книгу «Modernizing Legacy Applications in PHP». И я не раз слышал упоминание его фреймворка Aura в контексте встраивания отдельных компонент в старые приложения.

Некоторые сомнения вызывает судьба проекта в долгосрочной перспективе. Будет ли это расширение поддерживаться и обновляться вместе с новыми версиями PHP? Как быстро будут исправляться баги, особенно приводящие к падению всего PHP? Наконец, если вы готовы рискнуть и установить подобное расширение на сервер, почему бы не пойти дальше: Phalcon — целый фреймворк виде расширения!

На этом странные новости закончились, перейдём коротким анонсам.

Вышел PhpStorm 2016.3, который принёс несколько мелких улучшений. Сначала я подумывал даже записать отдельный выпуск подкаста, но там реально не так много интересного. Короче, просто обновляйтесь.

Что более интересно лично для меня, ребята из JetBrains выпустили плагин с поддержкой их собственного баг-трекера YouTrack и теперь я могу работать с тикетами не покидая PhpStorm! Установив его, в диалоге добавления сервера я обнаружил иконки и других трекеров: JIRA, Lighthouse, PivotalTracker, Redmine, Track, FogBugz, Mantis, Asana, Assembla, Sprintly, Trello, Gitlab, Bugzilla и GitHub! Почему я раньше не слышал про этот плагин и почему в новости в блоге JetBrains ничего не написано про поддержку такого числа багтрекеров? А может он уже давно существовал и вся новость заключалась в добавлении YouTrack? В любом случае, устанавилвайте и подключайте ваш любимый баг-трекер.

1 декабря 2016 ожидается выход PHP 7.1.0, готовьте свои apt-get’ы!

Неожиданно для себя, обнаружил на GitHub форк PHPExcel, известной библиотеки для чтения и записи Excel файлов, под названием PhpSpreadsheet. Репозиторий PhpSpreadsheet находится в той же организации PHPOffice и технически не является форком (не имеет ссылки на оригинальный репозиторий PHPExcel). Цель проекта — существенно обновить кодовую базу и API оригинального PHPExcel, который, напомню, работает поддерживает PHP вплоть до 5.2, соответственно не имеет неймспейсов и в целом сложен в поддержке. Последния версия PHPExcel 1.8.1 вышла 1 мая 2015 года, т.е. полтора года назад. Я изредка заглядывал в репозиторий и видел там работы по переводу на нейспейсы и рефакторингу. В итоге, как мы теперь видим, было решено выделить этот глобальный рефакторинг в отдельный проект под названием PhpSpreadsheet. Текущее состояние — нестабилен и не готов к production использованию. Зато, если вы искали себе OpenSource проект для общественно полезных коммитов — это отличный кандидат, присоединяйтесь!

17 ноября 2016 я был на Symfony Moscow Meetup — Symfoniacs — #10. Как всегда интересные доклады: про замену шаблонизатора Twig на ReactJS, про DevOps, про основные паттерны проектирования и их реализацию в Symfony 3 и про использование очередей сообщений в Symfony проекте, в частности, с помощью RabbitMQ. Последний доклад, который про RabbitMQ, лично для меня оказался наиболее актуальным и интересным. Есть видео запись всего мероприятия. Следующая встреча запланирована на декабрь, но пока не анонсирована, следите за твиттером!

Из ближайших конференций в Москве рекомендую посетить FPCONF 3 декабря 2016 — конференция по функциональному программированию; и HolyJS 11 декабря 2016 — чисто про JavaScript. Оба мероприятия платные.

Наконец, если вы работаете с JavaScript и ReactJS, подписывайтесь на мой новый подкаст «Пятиминутка React».

  • Alexander Monoskin

    >> А может он уже давно существовал и вся новость заключалась в добавлении YouTrack?

    Именно так и есть. Плагин TaskManager, если не ошибаюсь, от JetBrains, использую его уже пару лет, наверное.
    Последнее время в связке с Trello, некоторые другие интеграции работают не так как хотелось бы.
    Очень удобно если разрабатываешь какие-то достаточно объемные задачи, между которыми периодически надо переключаться. Создаются задачи, можно автоматически создать ветку git, Чейнджлист и поменять статус задачи (в Trello), после окончания задачи можно сделать git merge (+ удалить ветку), закрыть задачу в Trello.
    Но самое удобное — в задачах сохраняется контекст, так что все открытые файлы и дерево проекта запоминается. Так что можно вернуться к задаче через неделю, месяц и перед глазами будет все также, как и было в последний раз.