Январь 2024

Январь 2024

Подборка свежих новостей, инструментов, видео и материалов из мира PHP.

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

Новости

Вышли PHP 8.2.15 и PHP 8.3.2

🐛 Выпуски с исправлениями ошибок вышли по расписанию.

The PHP Foundation Team Update 2024

В этом году к PHP Foundation присоединятся еще четыре разработчика для дальнейшего развития PHP: David Carlier, James Titcumb, Saki Takamachi и Shivam Mathur.

Поприветствуем новых членов команды и пожелаем им больших достижений.

Рейтинг TIOBE

Компания 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 2024.1

С помощью программы раннего доступа вы можете попробовать новые возможности PhpStorm и оставить свой отзыв команде PhpStorm. Сборки EAP бесплатны для использования и не требуют лицензии.

В этой сборке реализована поддержка PHPUnit 11, улучшена работа с фреймворком для тестирования Pest, улучшены функции анализа кода, а также внесено множество других улучшений.

PHP Core

Большинство новостей ядра PHP подробно освещаются в серии PHP Core Roundup от PHP Foundation, мы лишь быстро по ним пробежимся:

📣 RFC: Opt-in DOM spec-compliance

Модуль DOM изначально соответствовал спецификации DOM Core Level 3, но не может поддерживать «Живую спецификацию» из-за множества ошибок.

Это приводит к тому, что люди пытаются обойти эти ошибки, полагаясь на ещё большие ошибки или на недокументированные побочные эффекты, что в итоге приводит к ещё большим проблемам. И эти ошибки не ограничиваются только HTML, они также распространяются на XML-документы.

HTML 5 RFC уже одобрен для PHP 8.4. Теперь Niels Dossche предлагает построить на его основе «Живую спецификацию», сохранив старую для обратной совместимости.

📣 Dedicated StreamBucket class

Сейчас нет отдельного класса для работы с бакетами потока и используется stdClass.

Máté Kocsis предлагает добавить новый окончательный класс StreamBucket для облегчения статического анализа и улучшения обратной связи.

📣 RFC: Multibyte for ucfirst, lcfirst functions, mb_ucfirst mb_lcfirst

Yuya Hamada предлагает добавить многобайтовую поддержку для функций ucfirst и lcfirst; по аналогии, в PHP 8.4 уже будет доступна многобайтовая поддержка для функций trim, ltrim и rtrim.

📣 RFC: Raising zero to the power of negative number

Сейчас возведение в отрицательную степень нуля возвращает float(INF). Jorg Sowa предлагает PHP 8.4 выдавать предупреждение об устаревании, а начиная с PHP 9.0 – выбрасывать исключение.

📣 RFC: Deprecate implicitly nullable parameter types

В настоящее время использование 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) {} // Всё в порядке

RFC: Improve callbacks in ext/dom and ext/xsl

Методы XSLTProcessor::registerPHPFunctions() и DOMXPath::registerPhpFunctions() смогут использовать тип callable в PHP 8.4.

RFC: Resource to object conversion

В PHP ведётся долгосрочная работа по переводу всех ресурсов в объекты. RFC предложил план, как осуществить этот переход.

Вторичное голосование определило, что ресурсы основного потока (поток, постоянный поток), вспомогательные ресурсы потока (контексты, фильтры, бригады, бакеты) и ресурс Process будут преобразованы в PHP 9.0.

Остальные ресурсы будут постепенно преобразованы в PHP 8.4 или другой минорной версии, так изменение обратной совместимости будет незначительным.

📊 RFC: Promote the PHP Foundation

Нетехнический RFC, возникший из обсуждения PR в репозитории php/web-php, стоит ли продвигать PHP Foundation на сайте php.net.

📊 RFC: Final by default anonymous classes

Daniil Gentili предлагает сделать все анонимные классы окончательными по умолчанию и предоставить новое ключевое слово open, чтобы при необходимости сделать их неокончательными. Это похоже на new open class {} в Kotlin.

📊 RFC: Policy Repository

RFC был принят единогласно, политики будут храниться в репозитории php/policies.

📊 RFC: RFC1867 for non-POST HTTP verbs

RFC1867 определяет тип контента multipart/form-data. PHP поддерживает анализ этого типа контента, но только для POST-запросов. Если осуществляется POST-запрос и тип содержимого multipart/form-data, тело запроса немедленно обрабатывается перед запуском PHP-скрипта и заполняется в суперглобальные переменные $_POST и $_FILES. Эта функция запускается автоматически и не предоставляется непосредственно пользователю.

Ilija Tovilo предлагает добавить новую функцию request_parse_body(), чтобы вывести существующую функциональность на пользовательский уровень и использовать её для других HTTP-методов, например, PUT и PATCH.

🎉 Новый PECL появится в 2024 году

PHP Foundation собирается пересмотреть способ установки модулей в PHP.

Сейчас модули распространяются с помощью устаревшего сайта pecl.php.net и инструмента pecl. Цель состоит в том, чтобы предоставить современную альтернативу, которая будет проще в использовании как для пользователей, так и для разработчиков модулей.

Инструменты

  • @php-wasm/cli – Запуск PHP с WASM в терминале!
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, не меняя фреймворк или приложение.

Symfony

Laravel

Статьи

Видео

Сергей Пантелеев
Релиз-менеджер PHP 8.2
Роман Пронский
Администратор PHP Foundation
Краткий дайджест в нашем Telegram
Ещё больше новостей в блоге компании JetBrains
PHP-дайджест в видео формате на канале CutCode
Рассылка PHP-дайджестов
Подпишитесь на рассылку, чтобы не пропустить новый выпуск

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

Мы заботимся о ваших данных и не будем злоупотреблять доверием.