Pull to refresh

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

Reading time5 min
Views14K


Подборка свежих новостей, инструментов, видео и материалов из мира 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

Tags:
Hubs:
Total votes 57: ↑55 and ↓2+64
Comments12

Articles