PHP-Дайджест № 189 (21 сентября – 5 октября 2020)


    Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 8.0 RC 1 и переименование параметров внутренних функций, PhpStorm 2020.3 EAP, многострочные короткие лямбды, атрибуты для групп свойств и другие новости PHP Internals, порция полезных инструментов, статьи, стримы, подкасты.

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



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


    • PHP 8.0.0 RC 1 — Стартовал цикл релиз-кандидатов ветки 8. Запланировано 4 выпуска и второй релиз-кандидат ожидается 15 октября.

      Усилия core-команды сосредоточены на пересмотре имен аргументов во всех модулях. Пример переименований в PDO. За ходом можно наблюдать здесь.
    • PhpStorm 2020.3 EAP — Стартовала программа раннего доступа. Уже реализована полная поддержка PHP 8 — поможет быстро сделать пакеты совместимыми с новой версией интерпретатора. Запланированы Xdebug 3, PHPStan/Psalm (в следующих билдах), интеграция Guzzle с HTTP-клиентом и другие фичи.
    • PHP 7.2.34
    • PHP 7.3.23
    • PHP 7.4.11
    • ru phpcommunity.ru — PHP-митапы, чаты и ютуб-каналы.
    • Традиционный Hacktoberfest с возможностью получить футболку за 4 пул-реквеста в открытые проекты пошел в этом году не по плану.

      Какой-то ютубер опубликовал инструкцию и показал, как делать примитивные пул-реквесты с изменениями в readme. Посыпался шквал бессмысленных PR. В итоге DigitalOcean теперь учитывают пул-реквесты только в те репозитории, у которых авторы явно указан топик ‘hacktoberfest’.

      Если вы хотите поучаствовать в опенсорсе и получить футболку, то вот инструкция как сделать хороший пул-реквест и список и issues с тегом #hacktoberfest в PHP-проектах.

    PHP Internals


    • check [PR] Attributes on property groups — Атрибуты можно будет указывать сразу для группы свойств, а не только по одному, так же как это работает для модификаторов доступа.
      class FooBar {
          #[NonNegative]
          public int $x, $y, $z;
      }
      
    • check [PR] Attributes and strict types — Также атрибуты будут принимать во внимание директиву strict_types=1.
    • [PR] OPCache: Direct execution opcode file without php source code file — Концепт в виде в PR, в котором автор предлагает сделать возможным сохранять бинарный файл опкеша и запускать его уже без исходника. По сути, это что-то напоминающее подход в Java или очень похожее на питоновские файлы .pyc / .pyo.

      Теоретически, в этом случае можно было бы распространять предварительно скомпилированный PHP-код без исходников. Типа как .phar, но уже интерпретированный.

      Но в обсуждении указали на проблемы такого подхода. Формат опкода в PHP нестабилен и несовместим от версии к версии. Причем даже в рамках патч-релизов, то есть код скомпилированный на PHP 7.4.22 может просто свалиться с segfault на PHP 7.4.23. А сделать его стабильным — маловероятно.
    • [PR] Multiline arrow functions — Короткие лямбды, добавленные в PHP 7.4, могут содержать только одно выражение. В этом пул-реквесте представлена реализация многострочных коротких лямбд:
      $guests = array_filter($users, fn ($user) => {
      
        $guest = $repository->findByUserId($user->id);
      
      
        return $guest !== null && in_array($guest->id, $guestsIds);
      
      });
      

      Из явных преимуществ по сравнению с обычными лямбдами можно отметить автоматический захват скоупа, то есть не надо добавлять use.

      Также остается открытым вопрос синтаксиса, а именно стоит ли добавлять стрелку =>:
      fn() => {}
      или
      fn() {}

    Инструменты


    • thephpleague/event 3.0.0 — Популярный пакет для событий теперь совместим с PSR-14.
    • terrylinooo/simple-cache — Драйверы кеша по стандарту PSR-16 для хранения в файлах, Redis, MySQL, SQLite, APC, APCu, Memcache, Memcached и WinCache.
    • Code With Me (EAP) — В тестовом режиме доступен плагин для совместной работы в IDE от JetBrains.
    • Bolt 4.0 — Обновление популярной CMS на Symfony- компонентах.

    Symfony



    Laravel



    Yii


    • W3C откажется от WordPress и будут использовать CraftCMS, который сделан на базе Yii 2. Сама новость не была бы такой интересной без отличного документа о том, какие аспекты принимались во внимание при выборе.

    Async PHP


    • micc83/mailamie — Простой SMTP-сервер для тестирования отправки почты. Реализован на ReactPHP.

    Материалы для обучения



    Аудио/Видео






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

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

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

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

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

      +2

      Консольная утилита для пометки топиков и добавления меток для хактоберфеста
      https://github.com/do-community/hacktoberfest-repo-topic-apply (лучше сначала глянуть pr )

        0
        [PR] OPCache: Direct execution opcode file without php source code file

        Так это и сейчас можно, правда чуть менее удобно. Если не путаю, за это отвечает настройка opcache.file_cache, которая будет использовать файлы опкеша, вместо shmop.

          0

          Там, судя по всему, имеется ввиду подключение аля dll или so.

            +1

            Речь про запуск скомпилированного в опкод. А-ля .java -> .jar
            К сожалению не получится, поскольку


            Формат опкода в PHP нестабилен и несовместим от версии к версии.

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

              +2

              В случае с докером или близкими аналогами может быть не столь критично: запускаться в образе будет той же версией, что и собираться. С точностью до коммита, даже если поставить latest тег

                0

                И чем оно тогда концептуально будет отличаться от прелоада?

                  0

                  Исходники в контейнере вообще не нужны (от реализации зависит, правда, но логично чтоб были не нужны) и скрипта инициализации не нужно, как и времени на "разогрев" при старте сервера.

                    0

                    Кстати, с привязкой к конкретному коммиту на конкретной архитектуре можно не то, что опкоды, а нативные для "JIT" компилировать заранее

                      +1

                      А можно вообще слепок памяти взять :)

                  +1

                  Это так. Однако повторю мой тезис: Файлы и сейчас можно сгенерировать и запускать.


                  Единственное отличие от представленного RFC это то, что запуск их происходит не напрямую (пхп выполни мне файл опкода), а опосредованно (пхп выполни код Х или возьми его из директории, если там есть файлы опкеша для этого кода Х).


                  P.S.

                  Не знаю насколько это будет интересно, но я набрасывал пример ридера таких файлов: https://github.com/SerafimArts/opcache В данном случае example.php является примером PHP кода, а example.php.bin, бинарным файлом опкеша, сгенерированным самим PHP для этого example.php. Там же есть набросок исходников для чтения файлов опкеша, а в resources висят шаблоны для деструктуризации файлов опкеша PHP для 010 Editor, что б понять что в них вообще находится.

                    0
                    Это так.

                    Подумалось тут, что для этих целей можно взять AST. И оно даже будет обратно совместимо в довольно широких пределах. И, наверное, даже даст какой-то мизерный буст.

                      0

                      В том-то и дело, что мизерный, скорее всего.

                        0

                        Отсюда возникает вопрос — а какая, собственно, цель?


                        Вот аргументация автора


                        This patch addresses the following issues:
                        1. Opcode binaries can be published when binding to a PHP interpreter (version dependent) release product, rather than just the PHP source code(for example, JAVA and .NET is version-dependent)
                        2. Extend compilation only online to compile anywhere. You can avoid problems caused by cold starts by publishing more code


                        Explanation of some questions:
                        This patch simply changes OpCache's process of detecting the opcode cache against the requested file, allowing it to treat the current file as an Opcode file..
                        This means that files compiled using the opcache_complie_file function are still cache files that can be moved anywhere, so it is up to the developer to ensure that the compilation is consistent with the version of the interpreter that is running.
                        When a developer compiles with the opcache_complie_file function and enables the relevant configuration in the running container, they should be aware of these limitations and some of the functionality failures.
                        I will add PHP version information when writing labels, and give a hint when the runtime does not match the current version.

                        In addition, the Phar file does not skip the compilation of Opcache, so it also supports packaging opcode files into the Phar file

                        На вот этот вопрос Никиты


                        It would be good to know what the actual use-case for this is. If the goal
                        here is to distribute pre-compiled PHP code without the source code, then
                        this is not going to work without making the opcode format stable (which, I
                        think, is pretty unlikely.) If the goal is improving cold startup
                        performance, then I wonder what the benefit over the existing file cache is.

                        По первому варианту использования, AST может выстрелить, так как оно сильно стабильнее самой VM (в плане обратной совместимости).

                          0

                          Может, вопрос насколько эффективно это будет подсовывать AST вместо исходников. То есть каково соотношение сейчас между парсингом исходников в AST и генерацией опкодов из AST

                            0

                            Эффективность аховая. Но речь то больше про обфускацию, насколько я понял.


                            Но генерация опкода из AST всяко быстрее. Токенизация вообще не самый быстрый процесс, а там еще и проверка на валидность.

                0

                Если что, все репозитории Yii засчитываются в Hacktoberfest и мы готовы рассматривать pull request-ы.

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

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