Всем привет! Краткий обзор новостей из мира PHP и Laravel за сентябрь 2023 г.
PHP Дайджест
Вышли PHP 8.1.24 и PHP 8.2.11
Выпуски с исправлениями ошибок вышли по расписанию.
Вышел третий релиз кандидат PHP 8.3.0
Очередной релиз-кандидат вышел по расписанию, до официального выхода PHP 8.3.0, который намечен на 23 ноября, осталось 3 выпуска.
Большинство новостей ядра PHP подробно освещаются в серии PHP Core Roundup от PHP Foundation, мы лишь быстро по ним пробежимся.
?RFC: Increasing the default BCrypt cost
Tim Düsterhus предлагает увеличить значение параметра const в BCrypt по умолчанию, обозначающего алгоритмическую стоимость, которая должна использоваться, с 10 до 11 (двухкратное увеличение времени) или до 12 (четырехкратное увеличение времени).
?RFC: DOM HTML5 parsing and serialization
Niels Dossche предлагает добавить в модуль DOM два новых класса: HTMLDocument и XMLDocument.
Класс HTMLDocument добавит поддержку разбора и сериализации HTML5-документов в соответствии со спецификацией. Класс XMLDocument будет служить современной альтернативой классу DOMDocument, который сохраняется для совместимости. Эти новые классы также обеспечат более устойчивый к злоупотреблениям API для загрузки документов.
Существующие классы DOM в глобальном пространстве имен получат псевдоним в новом пространстве имен DOM, так что новая реализация будет использоваться по умолчанию.
?RFC: A new JIT implementation based on IR Framework
Дмитрий Стогов предлагает новую реализацию Just-in-Time компилятора, основанную на собственном фреймворке Дмитрия Intermediate Representation.
Основной плюс нового подхода в том, что исходный код PHP освободится от низкоуровневых деталей JIT-компиляции. Теперь интерпретатор будет формировать так называемое промежуточное представление, которое вышеупомянутый фреймворк превратит в ассемблерный код с учётом процессорной специфики. Также новый JIT позволит в будущем применить дополнительные оптимизации (видимо, уже на стороне фреймворка) для получения более эффективного машинного кода. Минус же состоит в более долгой JIT-компиляции.
Изначально Дмитрий собирался оставлять обе версии JIT, но, судя по обсуждению в PR, многие не против просто поменять старую на новую и не париться с поддержкой двух компиляторов.
❌RFC: Support optional suffix parameter in tempnam
RFC о котором мы говорили в прошлом выпуске был отклонен.
Основная проблема – суффикс не будет работать в Windows. Чтобы избежать больших проблем из-за незначительного изменения, многие проголосовали против.
Команда CakePHP выпустила пятую версию фреймворка, которая была в разработке последние два года. Теперь для работы требуется PHP 8.1 и выше, улучшены подсказки по всему фреймворку. CakePHP теперь использует объединения типов для формализации типов многих параметров во всей платформе, обновлён PHPUnit до 10 версии, новая поддержка сопоставления перечисления типов в ORM, обеспечивающая более выразительные слои модели с улучшенной проверкой типов, добавлена поддержка HTTP-фабрик PSR17 и многое другое.
Исследование по Laravel, о котором мы говорили в прошлом выпуске завершилось. Более 4000 разработчиков приняло участие в этом году. Уменьшилась доля людей, которые считают, что Laravel фреймворк движется в правильном направлении с 49% до 41%. Напишите в комментариях, как считаете вы?
Пакет enum-concern от Emre Yarligan
PHP-пакет для удобной работы с перечислениями с помощью Laravel Collections.
Пакет включает зависимость от Collections, поэтому его можно использовать не только в Laravel проектах.
Пакет act от Casey Lee
Пакет позволяет запускать GitHub Actions локально!
Это может быть полезно для отладки скриптов, не делая множество коммитов на GitHub и ожидая их выполнения.
Когда вы запускаете act, он считывает GitHub Actions из папки workflows и определяет набор действий, которые необходимо выполнить. Используя Docker API для извлечения или создания необходимых образов, как определено в файлах workflow, и, наконец, определяет путь выполнения на основе определенных зависимостей.
Получив путь выполнения, он использует Docker API для запуска контейнеров для каждого действия на основе ранее подготовленных образов. Переменные среды и файловая система настроены в соответствии с тем, что предоставляет GitHub.
PhpStorm Public Roadmap: What’s Coming in 2023.3
Что ожидать в PhpStorm 2023.3?
Команда PhpStorm добавит комплексную поддержку PHP 8.3, возможность исключать каталоги и файлы внешних библиотек для ускорения индексации, специальную стилизацию типов в дженериках.
Для Symfony разработчиков будет полезным мастер создания нового проекта, преобразование аннотаций Doctrine в атрибуты, а также поддержка Doctrine Query Language внутри QueryBuilder.
Voices
Плагин для продуктов JetBrains Voices позволяет комментировать код голосовыми сообщениями.
Напишите в комментариях как вы относитесь к такой идее?
Flappyphpant
И напоследок давайте посмотрим простую игру, похожую на Flappy Bird, написанную на PHP, построенная на PHP-GLFW и фреймворке VISU.
Далее посмотрим что произошло в этом месяце в Laravel.
Laravel дайджест
MoonShine v.2.0 alpha
Вышла MoonShine v.2.0 alpha - open-source админ панель для Laravel. Что нового - читайте в этой статье.
Обновления Laravel
10.22. Testing methods for Precognition
PR от Peter Fox, который добавляет нам сахара в процесс тестирования precognition запросов. У нас появился удобный метод usingPrecognition, чтобы сразу отправить нужные заголовки. Также появился метод который проверит в ответе нужные заголовки.
10.22. Добавление поддержки Enum в правила валидации In и NotIn
Следующий PR добавил поддержку Enum в правила валидации In и NotIn. Теперь мы с вами можем использовать также и кейсы из Enum.
10.23. Команда make:view
PR, который судя по описанию очень долго ждали - это artisan команда которая создает view. Скажите а ждали ли вы эту команду? Лично я не особо. Но в целом у нас есть команда которая теперь создает view, располагает ее в директории и появилась также опция –test, которая заодно создаст и дополнительно тесты - правильно у нас это view рендерится.
Ну и раз у нас PR от Nuno Maduro, также и опция –pest, которая сгенерирует Pest тесты.
10.23. Поддержка PHPredis 6.0
Небольшом PR, который добавляет поддержку PHP redis версии 6.0.
10.23. Before/After database truncation methods
PR, который добавляет новые ивенты в тесты на отслеживание событий до того как у нас происходит очистка базы данных и соответственно после.
10.23. Команда Make:Model с опцией Test
Немного прокачали команду Make:Model с опцией Test. До этого, когда мы ее с вами выполняли у нас создавался тестовый файл featureModels, но не было при этом тестового файла для контроллера, хотя в опции мы могли указать что также нам нужен контроллер. Теперь тестовый файл для контроллера создается.
10.24. Метод Str::position()
Затрагивает класс по работе со строками и новый сахарный метод Position над нативным mb_strpos. Но я думаю здесь и так все понятно - ищем позицию указанной строки в строке.
10.25. Метод String Take()
Снова класс по работе со строками и снова сахар, но в целом в рамках этого класса другого мы не ожидаем. Чтобы из указанной строки получить только количество символов которые мы передаем в метод Take. В общем сахар над сахаром Str::substring, где соответственно сам substring это сахар над нативным substr.
10.25. Throttle Exception
PR от Tim McDonald, который добавляет новый метод в errorHandler класс в Laravel. Для нашего удобства чтобы отделить Exception от ratelimit и уже далее с ними взаимодействовать, делать репорт и все что угодно.
Видео версия дайджеста: