Подборка свежих новостей, инструментов, видео и материалов из мира PHP.
Приятного чтения!
🐛 Выпуски с исправлениями ошибок вышли по расписанию.
В этом году к PHP Foundation присоединятся еще четыре разработчика для дальнейшего развития PHP: David Carlier, James Titcumb, Saki Takamachi и Shivam Mathur.
Поприветствуем новых членов команды и пожелаем им больших достижений.
Компания TIOBE Software опубликовала январский рейтинг популярности языков программирования, в котором по сравнению с январем 2023 года JavaScript переместился с 7 на 6 место, PHP – с 10 на 7, Scratch – с 20 на 10, Go – с 12 на 11, Fortran – с 27 на 12, Kotlin - с 25 на 17, а Cobol – с 31 на 20. Языком года был назван C#, который сохранил за собой 5-е место, но стал лидером по приросту (+1,43 %).

С помощью программы раннего доступа вы можете попробовать новые возможности PhpStorm и оставить свой отзыв команде PhpStorm. Сборки EAP бесплатны для использования и не требуют лицензии.
В этой сборке реализована поддержка PHPUnit 11, улучшена работа с фреймворком для тестирования Pest, улучшены функции анализа кода, а также внесено множество других улучшений.
Большинство новостей ядра PHP подробно освещаются в серии PHP Core Roundup от PHP Foundation, мы лишь быстро по ним пробежимся:
Модуль DOM изначально соответствовал спецификации DOM Core Level 3, но не может поддерживать «Живую спецификацию» из-за множества ошибок.
Это приводит к тому, что люди пытаются обойти эти ошибки, полагаясь на ещё большие ошибки или на недокументированные побочные эффекты, что в итоге приводит к ещё большим проблемам. И эти ошибки не ограничиваются только HTML, они также распространяются на XML-документы.
HTML 5 RFC уже одобрен для PHP 8.4. Теперь Niels Dossche предлагает построить на его основе «Живую спецификацию», сохранив старую для обратной совместимости.
Сейчас нет отдельного класса для работы с бакетами потока и используется stdClass.
Máté Kocsis предлагает добавить новый окончательный класс StreamBucket для облегчения статического анализа и улучшения
обратной связи.
Yuya Hamada предлагает добавить многобайтовую поддержку для функций ucfirst и lcfirst; по аналогии, в PHP 8.4 уже
будет доступна многобайтовая поддержка для функций trim, ltrim и rtrim.
Сейчас возведение в отрицательную степень нуля возвращает float(INF).
Jorg Sowa предлагает PHP 8.4 выдавать предупреждение об устаревании, а начиная с PHP 9.0 – выбрасывать исключение.
В настоящее время использование null в качестве значения по умолчанию для параметра функции разрешено и не приводит к
ошибке, даже если тип параметра и не является nullable.
Более того, существует небольшое несоответствие в разрешении необязательных параметров перед обязательными. Например, следующая сигнатура является допустимой:
1function foo(T1 $a, T2 $b = null, T3 $c) {}
Máté Kocsis и Gina Peter Banyard предлагают отказаться от таких объявлений и требовать явных пометок nullable.
Это изменение, ломающее обратную совместимость, но переход довольно прост и может быть автоматизирован.
1function foo(T $var = null) {} // Ошибка уровня E_WARNING, если RFC будет принят2function foo(?T $var = null) {} // Всё в порядке
Методы XSLTProcessor::registerPHPFunctions() и DOMXPath::registerPhpFunctions() смогут использовать тип callable в
PHP 8.4.
В PHP ведётся долгосрочная работа по переводу всех ресурсов в объекты. RFC предложил план, как осуществить этот переход.
Вторичное голосование определило, что ресурсы основного потока (поток, постоянный поток), вспомогательные ресурсы
потока (контексты, фильтры, бригады, бакеты) и ресурс Process будут преобразованы в PHP 9.0.
Остальные ресурсы будут постепенно преобразованы в PHP 8.4 или другой минорной версии, так изменение обратной совместимости будет незначительным.
Нетехнический RFC, возникший из обсуждения PR в репозитории php/web-php, стоит ли продвигать PHP Foundation на сайте php.net.
Daniil Gentili предлагает сделать все анонимные классы окончательными по умолчанию и предоставить новое ключевое слово
open, чтобы при необходимости сделать их неокончательными. Это похоже на new open class {} в Kotlin.
RFC был принят единогласно, политики будут храниться в репозитории php/policies.
RFC1867 определяет тип контента multipart/form-data. PHP поддерживает анализ этого типа контента, но только для
POST-запросов. Если осуществляется POST-запрос и тип содержимого multipart/form-data, тело запроса немедленно
обрабатывается перед запуском PHP-скрипта и заполняется в суперглобальные переменные $_POST и $_FILES. Эта функция
запускается автоматически и не предоставляется непосредственно пользователю.
Ilija Tovilo предлагает добавить новую функцию request_parse_body(), чтобы вывести существующую функциональность на
пользовательский уровень и использовать её для других HTTP-методов, например, PUT и PATCH.
PHP Foundation собирается пересмотреть способ установки модулей в PHP.
Сейчас модули распространяются с помощью устаревшего сайта pecl.php.net и инструмента pecl. Цель состоит в том, чтобы
предоставить современную альтернативу, которая будет проще в использовании как для пользователей, так и для
разработчиков модулей.
1npx @php-wasm/cli -r 'echo "Привет, мир!";'
Спасибо команде WordPress за продвижение этой идеи!
На случай, если вы пропустили, есть также локальная среда разработки на основе WASM для PHP wp-now.
Вышел nikic/PHP-Parser 5.0.0 – Список изменений впечатляет.
spatie/holidays – Пакет для расчёта дней, когда вам не нужно работать! Проверьте, как это работает.
spatie/tabular-assertions – Позволяет создавать табличные утверждения с помощью Pest или PHPUnit.
denzyldick/phanalist – Наглядный и быстрый статический анализатор для PHP, созданный на Rust. Он довольно мал по сравнению с PHPStan или Psalm, но хорош для того, чтобы иметь возможность написать свой собственный статический анализатор для PHP на Rust.
simonhamp/the-og – Генератор изображений OpenGraph на чистом PHP.
doekenorg/decorate-php – Создание PHP-декоратора или прокси на основе интерфейса или (абстрактного) класса.
owasp-dep-scan/dep-scan – Инструмент аудита безопасности и рисков нового поколения от OWASP, основанный на известных уязвимостях, рекомендациях и лицензионных ограничениях для зависимых проектов.
В посте DepScan ❤️ PHP были анонсированы cdxgen и depscan 5.2.0 с поддержкой точного анализа достижимости для
PHP-приложений, библиотек и плагинов WordPress.
valorin/random – Простой пакет-помощник, предназначенный для упрощения генерации различных криптографически безопасных случайных значений.
theodo-group/LLPhant – Комплексный PHP Generative AI Framework, использующий OpenAI GPT 4. Вдохновлён Langchain и LLamaIndex.
julien-boudry/Condorcet – Приложение командной строки и библиотека PHP, предоставляющая механизм выборов с высокоуровневым интерфейсом. Встроенная поддержка 20+ методов голосования, легко расширяемая. Поддержка простых выборов или миллиардов голосов в условиях низких ресурсов.
archtechx/enums – Помощники, позволяющие сделать перечисления PHP ещё лучше.
JustSteveKing/php-sdk – Базовая библиотека для ваших PHP SDK.
danog/php-tokio – Использование асинхронных библиотек Rust в PHP.
joanhey/AdapterMan – Запустите практически любое PHP-приложение асинхронно с помощью walkor/workerman, не меняя фреймворк или приложение.

Нажимая «Подписаться» я даю согласие на обработку персональных данных.
Мы заботимся о ваших данных и не будем злоупотреблять доверием.