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

Комментарии (12)


  1. mnogokotin
    21.02.2022 16:44
    +4

    спасибо )


  1. Dangetsu-PK
    21.02.2022 17:40
    +8

    Этот Патрик - знатный извращенец, должен я сказать.


    1. vashkatsi
      21.02.2022 19:46
      +2

      Я ничего не понял с этим __invoke, какой в нем смысл? Почему именно с __invoke, а не простым методом? Да и в принципе какая-то концепция странная.


      1. BeMySlaveDarlin
        21.02.2022 21:44
        +1

        __invoke не требует интерфейса, не требует дополнительного вызова конкретного метода и метаний в именовании метода рендера.

        Invokable объекты можно передавать как callable и так ж выполнять.

        Ещё какие-то моменты есть, но не вспомню с наскоку.


        1. vashkatsi
          21.02.2022 22:29

          Спасибо, круто, не думал в таком ключе. Ждем примеров от Патрика.


          1. Brainbao
            22.02.2022 11:02
            +1

            1. vashkatsi
              22.02.2022 11:54

              Круто, спасибо. Уважуха Патрику, мыслит нестандартно. У него вьюшки используются через __invoke, а юзеры создаются через require.


      1. SamDark
        21.02.2022 23:31

        Я думал что только @roxblnfk такое по нраву. Мы рассматривали это для Yii3, но всё-же решили что пойдём по классике с require.


  1. egor_nullptr
    21.02.2022 18:11
    +2

    Доступна сертификация по Twig 3

    Ждём не дождёмся сертификации по vim, состоящей из одного единственного вопроса


  1. vfreelancer
    22.02.2022 00:33

    не работает ссылка https://telegra.ph/Kak-pomoch-s-relizom-Yii3-02-14


    1. Rustam95
      22.02.2022 11:02

      работает


  1. ARG89
    22.02.2022 16:38

    Отличный материал, спасибо! я бы еще добавил новость про новый адаптер для Allure Framework с поддержкой PHPUnit и Codecept: https://qameta.io/blog/allure-php-2-0-major-update/