PHP-Дайджест № 193 (16 – 30 ноября 2020)


    Парад релизов: обновление языка — PHP 8.0, а также Xdebug 3, DBAL 3.0, Bref 1.0, Symfony 5.2, Flysystem 2.0. Первый принятый RFC для PHP 8.1, долгосрочная поддержка PHPUnit, порция полезных инструментов, подкасты, стримы, статьи.

    Приятного чтения!



    PHP 8


    Новости и релизы


    • Xdebug 3 — Большое обновление популярного отладчика. Теперь он быстрее в работе и значительно проще в конфигурации.

      Для старта достаточно одной опции xdebug.mode, а дефолтный порт сменен на 9003, чтоб не было конфликта с PHP-FPM. Подробнее в руководстве по обновлению.

      Сравнительные бенчмарки Xdebug 2 и Xdebug 3 показывают значительный прирост производительности. Для сбора покрытия он даже быстрее, чем phpdbg, хоть и медленнее PCOV.
    • Bref 1.0 — Релиз инструмента, который облегчает создание serverless-приложений на PHP и AWS Lambda. Кстати, теперь с поддержкой WebSocket — удержание соединения берет на себя API Gateway.
    • doctrine/dbal 3.0 — После 10 лет с выхода DBAL 2.0 наконец-то мажорное обновление популярной библиотеки для работы с базами данных. Короткий обзор есть в анонсе релиза. Главные изменения касаются отвязки DBAL от PDO. Все fetch-методы перенесены из класса Statement в новый Result.
    • thephpleague/flysystem 2.0 — Обновление библиотеки, абстрагирующей работу с файловыми системами. Что нового в версии 2.
    • PHP 7.4.13
    • PHP 7.3.25
    • В твиттере продолжились споры о том, стоит ли поддерживать старые версии PHP в опенсорс инструментах. Никита написал, что инструменты, в которых минимальная версия PHP повышается слишком резко, в действительности приносят больше проблем на пути к обновлению PHP.
      .
      Ранее эта же проблема обсуждалась, когда Марко Ocramius бампнул версию в своем пакете Ocramius/PackageVersions до 7.4 (уже и до 8.0). В результате чего в Composer 2 пакет заменили на форк composer/package-versions-deprecated.

      Так или иначе, а PHPUnit 9 и PHPUnit 8.5 получат Life Support. Это значит, что в них будет гарантирована работа на PHP 7.3 (7.2 соответственно) и всех последующих версиях PHP.


    PHP Internals


    • check [RFC] Explicit octal integer literal notation — Не успели выпустить PHP 8.0, а уже принят первый RFC для PHP 8.1! В следующей версии языка восьмеричные числа можно будет записывать с префиксом 0o.
      0o16 === 14; // true
      016 === 0o16; // true
      

    Инструменты


    • phpsandbox.io — Аналог codepen/jsfiddle только для PHP. Веб-сайт для быстрого тестирования и демонстрации кода. Кроме голого PHP можно сделать код на Laravel, ReactPHP или импортировать любой проект с Гитхаба.
    • beyondcode/httpdump — Приложение на Laravel для отладки входящих HTTP-запросов (отладка веб-хуков и т.п.). Создает случайные URL и дампит в красивом виде все запросы к ним. Демо httpdump.app.
    • clue/php-socket-raw — Легковесная ООП-обертка для низкоуровневого расширения сокетов PHP (ext-sockets).
    • zenstruck/foundry — Фабрика для создания удобных фикстур с автодополнением в IDE для Symfony и Doctrine.
    • spatie/backtrace — Обертка над debug_backtrace() для удобной работы со стеком вызовов.
    • nette/tracy — Инструмент для отладки: дебагбар, красивые ексепшены, логирование, профилирование, все в одном.
    • JetBrains/phpstorm-attributes — В PhpStorm 2020.3 будут из коробки доступны несколько атрибутов PHP 8. Теперь они вынесены в отдельный пакет.

    Symfony



    Laravel



    Разное



    Аудио/Видео



    Спасибо за внимание!

    Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку хабра или телеграм.

    Больше новостей и комментариев в Telegram-канале PHP Digest.

    Прислать ссылку
    Поиск ссылок по всем дайджестам
    Предыдущий выпуск: PHP-Дайджест № 192

    Комментарии 20

      +1

      Беда с переходом на PHP 8 началась с того что некоторые расширения не обновлены. Я столкнулся с 2мя:


      1. imagick — вообще нет релиза с поддержкой php 8, в issue на github конкретики не наблюдается, хотя кому-то удалось собрать последний RC под Linux из исходников.
      2. redis — нет dll для windows, но в changelog есть упоминание поддержки PHP 8.
        Видимо придется какое-то время подождать =(
        0
        На github где-то читал, что поправили и дествительно этот:
        github.com/Imagick/imagick/archive/master.zip
        собирается и работает. Но с ним какие-то другие косяки там были из-за которых использовал только тот который с pecl.php.net
        Ждемс полноценного обновления…

        ioncube тоже пока нет под php8
          +1
          Стремная праетика переходить нп продукт с релизом *.0.0. Следует дождатся хотя бы *.0.1 когда уже массово погоняют и будут пофиксены первые серьезные проблемы.
            0

            Так я и не говорил про production версию =) В любом случае нужно будет обновлять код если найдутся несовместимости, а это тоже время. Пока оттестируешь, как раз выйдет пара обновлений.

            0
            ssh2
              0
              Возможно я криворукий, но memcache тоже не удалось запустить на свежей восьмой версии. Я, правда, всего пол часика попытался. Но тем не менее.
                +1

                Вот тут список расширений со статусом совместимости с PHP 8:
                https://blog.remirepo.net/post/2020/09/21/PHP-extensions-status-with-upcoming-PHP-8.0


                imagick и ssh2 уже совместимы, но не выпущены релизы.


                А вот memcache и ioncube действительно не совместимы. Для memcache есть ветка так что вероятно будет в обозримом будущем.

                  0
                  А вот memcache и ioncube действительно не совместимы.
                  Ну слава богу, а я думал это у меня совсем не из того места руки выросли.
              0
              Может я пропустил, не было в дайджестах легковесной и функциональной обёртки для PDO?
                0

                Query Builder или что имеется в виду?

                  0
                  Благодарю!
                  +1
                  Doctrine DBAL?
                  В смысле не юзать ORM, а просто более низкую прослойку из этого инстурмента — быстро и понятно
                    0

                    Некоторые ORM и юзают сами, хотя с DoctrineORM конкурируют

                  +1
                  Жаль __toArray() не вошел в релиз.
                    +1
                    И не войдет в будущем. Это еще один способ прострелить себе ногу и большее магии
                      0
                      __toString() же не мешает никому. Этот метод вполне вписывается в концепцию языка и найдет свое применение. В других языках аналогичные вещи тоже есть.
                        0
                        Рекомендую почитать вот тред externals.io/message/98539
                        Как минимум, ввод этой функционала сломает логику (array) $object
                          0
                          Во первых, (array) $object в текущем виде бесполезен.
                          Во вторых не сломает, так как по умолчанию останется таким же, как и сейчас.
                            0

                            А в каких случаях это (array) $object реально нужно?

                              +1

                              Теоретически, если нам надо сделать агрегацию для массива объектов по полям, то приведя их к массивам это может оказаться проще и дешевле. Ну это так — сферическое предположение в вакууме.


                              class A{
                                 int $a;
                                 int $b;
                              ///100500 таких же свойств
                              }

                              Из массива таких объектов получить объект с максимальными значениями свойств. В случае кастования к массиву оно будет проще в реализации.

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое