PHP Дайджест № 222 (7 – 21 февраля 2022)

от автора

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

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

Этот дайджест подготовлен совместно с Insolita. Если понравился выпуск, плюсаните пост, пожалуйста.

⚡️️ Новости

  • PHP 7.4.28, PHP 8.0.16, PHP 8.1.3
    Обновления актуальных веток PHP с фиксом уязвимости в php_filter_float(), а в 8.0 и 8.1 еще с пачкой других фиксов.

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

  • Ubuntu 22.04 LTS выйдет с PHP 8.1
    Очередной релиз популярного Linux дистрибутива выйдет 21 апреля с предустановленным PHP версии 8.1.
    В связи с этим предлагается поднять минимальную версию PHP в следующем релизе Symfony 6.1. А для Drupal 10 это уже сделали.
  • PhpStorm 2022.1 EAP
    Продолжается программа раннего доступа первого мажорного релиза IDE в этом году. Сделали поддержку многострочных и вложенных аннотаций array shape! Можно использовать как в виде PHPDoc, так и в виде атрибута #[ArrayShape].
  • [RFC] Redacting parameters in back traces
    На голосовании предложение добавить аттрибут #[SensitiveParameter] для предотвращения отображения конфиденциальныx данных в отладочных логах.
    Скрытый текст

    function test(     $foo,     #[\SensitiveParameter] $bar,     $baz ) {     throw new \Exception('Error'); } test('foo', 'bar', 'baz');  // В результате в отладочной строке значение секретной переменной должно быть заменено на какое-то абстрактное значение:  /* Fatal error: Uncaught Exception: Error in test.php:8 Stack trace: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main}   thrown in test.php on line 8 */ 

  • [RFC] Undefined Variable Error Promotion
    Автор ранее предложил в PHP 9 перевести многие оставшиеся предупреждения (WARNING) в полноценные исключения. Такое уже раньше делали в PHP 8.0.

    Ну а начать решил с использования необъявленных переменных. Сейчас в этом случае бросается Warning и используется значение null.

    Скрытый текст

    // PHP < 8.2 if ($user->admin) { $restricted = false; }  if ($restricted) { // Сейчас тут просто WARNING, а будет Exception die('You do not have permission to be here'); }  // Чтоб исправить, нужно добавить инициализацию переменной // PHP >= 8.2 $restricted = true; // <-- Вот тут if ($user->admin) { $restricted = false; }  if ($restricted) { die('You do not have permission to be here'); } 

  • [RFC] Random Extension 4.0
    Сейчас функции типа rand() или mt_rand() будут генерировать одну и ту же последовательность для одинакового посевного (seed) значения, заданного с помощью srand(). Но из-за использования глобального состояния невозможно создать несколько генераторов с разными посевными значениями и использовать их одновременно.

    Автор предлагает добавить объектный API для работы с генераторами псевдослучайных последовательностей, чтоб решить проблему глобального состояния.

    Скрытый текст

    // Сейчас вот так mt_srand(1234, MT_RAND_PHP); foobar(); $result = str_shuffle('foobar');  mt_srand(1234, MT_RAND_MT19937); foobar(); $next = mt_rand();  // Предлагается вот так $randomizer = new Random\Randomizer(new Random\Engine\MersenneTwister(1234, MT_RAND_PHP)); foobar(); $result = $randomizer->shuffleString('foobar');  $randommizer = new Random\Randomizer(new Random\Engine\MersenneTwister(1234, MT_RAND_MT19937)); foobar(); $next = $randomizer->getInt(); 

  • [RFC] Allow null and false as stand-alone types
    Предлагается добавить возможность использовать null и false в декларациях типов.
    Во-первых, это недостающие куски для полноты системы типов в PHP — есть mixed, добавили never, объединения и пересечения, не хватает юнит-типа.
    Во-вторых, такие типы позволят покрыть некоторые граничные случаи и улучшить статический анализ.

? Инструменты

  • cebe/php-openapi — Преобразовывает OpenAPI-спецификации из yaml/json файлов в PHP-объекты.
  • spatie/github-actions-watcher — Консольный инструмент для просмотра состояния всех GitHub Actions в
    реальном времени.
  • nette/php-generator — Генератор PHP-кода теперь с поддержкой PHP 8.1.
  • sherifabdlnaby/kubephp — Продакшн шаблон для развертывания приложения в Docker и Kubernetes. Совместим с Laravel 5+ и Symfony 4+.
  • jaem3l/unfuck — Инструмент налету удаляет все final, private и определения типов в коде из vendor. Потому что сколько можно терпеть эти издевательства! Под капотом использует обертку над стримом, поэтому на проде лучше не запускать 🙂

    Появился в ответ на твит про функцию invade() и пакет spatie/invade:

Symfony

Laravel

Yii

  • Yii 2.0.45 — Добавлена поддержка PHP 8.1
  • Вышел Yii Runner для Yii3 и адаптеры для консольного приложения (Yii Console Runner), HTTP-приложения (Yii HTTP Runner) и приложения на базе RoadRunner (Yii RoadRunner Runner). Раннеры позволяют упростить процесс настройки приложения, скрывая детали инициализации.
  • ?? Как помочь с релизом Yii 3 — Статья Виктора Бабанова из core-команды Yii3 подробно рассказывает как помочь фреймворку кодом, даже если вы никогда раньше этого не делали.

Спасибо Сергею Предводителеву за подготовку блока про Yii!

? Статьи

? Сообщество


Подписывайтесь на Telegram-канал PHP Digest.

Этот дайджест подготовлен совместно с Insolita. Если вам понравился выпуск, подпишитесь на Юлию в твиттере и поставьте плюс в пост, пожалуйста.

Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.

Прислать ссылку можно через форму или просто напишите мне в телеграм.
Поиск ссылок по всем дайджестам
Предыдущий выпуск: PHP-Дайджест № 221


ссылка на оригинал статьи https://habr.com/ru/post/652753/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *