- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

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

⚡️️ Новости

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

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

  • Ubuntu 22.04 LTS выйдет с PHP 8.1 [6]
    Очередной релиз популярного Linux дистрибутива выйдет 21 апреля с предустановленным PHP версии 8.1.
    В связи с этим предлагается [7] поднять минимальную версию PHP в следующем релизе Symfony 6.1. А для Drupal 10 это уже сделали [8].

  • PhpStorm 2022.1 EAP [9]
    Продолжается программа раннего доступа первого мажорного релиза IDE в этом году. Сделали поддержку многострочных и вложенных аннотаций array shape! Можно использовать как в виде PHPDoc, так и в виде атрибута #[ArrayShape].

  • [RFC] Redacting parameters in back traces [10]
    На голосовании предложение добавить аттрибут #[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 [11]
    Автор ранее предложил [12] в PHP 9 перевести многие оставшиеся предупреждения (WARNING) в полноценные исключения. Такое уже раньше делали в PHP 8.0 [13].

    Ну а начать решил с использования необъявленных переменных. Сейчас в этом случае бросается 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 [14]
    Сейчас функции типа 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 RandomRandomizer(new RandomEngineMersenneTwister(1234, MT_RAND_PHP));
    foobar();
    $result = $randomizer->shuffleString('foobar');
    
    $randommizer = new RandomRandomizer(new RandomEngineMersenneTwister(1234, MT_RAND_MT19937));
    foobar();
    $next = $randomizer->getInt();
    

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

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

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

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

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

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

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

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

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

📝 Статьи

📣 Сообщество


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

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

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

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

Автор: Роман Пронский

Источник [73]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/php-2/372377

Ссылки в тексте:

[1] Insolita: https://twitter.com/DonnaInsolita

[2] PHP 7.4.28: https://www.php.net/ChangeLog-7.php#7.4.28

[3] PHP 8.0.16: https://www.php.net/ChangeLog-8#8.0.16

[4] PHP 8.1.3: https://www.php.net/ChangeLog-8#8.1.3

[5] уже не выходят: https://www.php.net/supported-versions.php

[6] Ubuntu 22.04 LTS выйдет с PHP 8.1: https://linuxconfig.org/ubuntu-22-04-features-and-release-date

[7] предлагается: https://github.com/symfony/symfony/pull/45377

[8] уже сделали: https://www.drupal.org/node/3264830

[9] PhpStorm 2022.1 EAP: https://blog.jetbrains.com/phpstorm/2022/02/phpstorm-2022-1-eap-3/

[10] [RFC] Redacting parameters in back traces: https://wiki.php.net/rfc/redact_parameters_in_back_traces

[11] [RFC] Undefined Variable Error Promotion: https://wiki.php.net/rfc/undefined_variable_error_promotion

[12] предложил: https://externals.io/message/116918

[13] делали в PHP 8.0: https://wiki.php.net/rfc/engine_warnings

[14] [RFC] Random Extension 4.0: https://wiki.php.net/rfc/rng_extension

[15] [RFC] Allow null and false as stand-alone types: https://wiki.php.net/rfc/null-false-standalone-types

[16] юнит-типа: https://en.wikipedia.org/wiki/Unit_type

[17] cebe/php-openapi: https://github.com/cebe/php-openapi

[18] spatie/github-actions-watcher: https://github.com/spatie/github-actions-watcher

[19] nette/php-generator: https://github.com/nette/php-generator

[20] sherifabdlnaby/kubephp: https://github.com/sherifabdlnaby/kubephp

[21] jaem3l/unfuck: https://github.com/jaem3l/unfuck

[22] spatie/invade: https://github.com/spatie/invade

[23] «Symfony: The Fast Track» Symfony: https://symfony.com/book

[24] Доступна сертификация по Twig 3: https://certification.symfony.com/exams/twig.html

[25] How to Build and Distribute Beautiful Command-Line Applications with PHP and Composer: https://levelup.gitconnected.com/how-to-build-and-distribute-beautiful-command-line-applications-with-php-and-composer-50b6420245f2

[26] Decoupling frontend and backend development — The easy way!: https://mrtnschndlr.medium.com/decoupling-frontend-and-backend-development-the-easy-way-5b93a6513e0d

[27] How does Symfony decide what content type to return in a response?: https://akashicseer.com/web-development/how-does-symfony-decide-what-content-type-to-return-in-a-response/

[28] Вышел Laravel 9: https://laravel.com/docs/master/releases#laravel-9

[29] Релиз Laravel 9: обзор новых функций: https://www.youtube.com/watch?v=EMecJtEgttg

[30] 9 интересных новшеств в Laravel 9: https://habr.com/ru/company/reksoft/blog/651553/

[31] What's New in Laravel 9: https://www.youtube.com/watch?v=MnSzUX7kU-E

[32] Laracasts: What's New in Laravel 9: https://laracasts.com/series/whats-new-in-laravel-9

[33] Jeffrey Way: https://twitter.com/jeffrey_way

[34] на YouTube (45 минут): https://www.youtube.com/watch?v=GwunZ5sH2P8

[35] illuminate/collections: https://github.com/illuminate/collections

[36] работает в PhpStorm: https://laravel.com/docs/master/releases#improved-collections-ide-support

[37] Laracon Online Winter '22: https://www.youtube.com/watch?v=0Rq-yHAwYjQ

[38] про Laravel 9 и про Nova 4: https://www.youtube.com/watch?v=0Rq-yHAwYjQ&t=21680s#:~:text=05%3A04%3A46

[39] Web3 на Laravel: https://www.youtube.com/watch?v=0Rq-yHAwYjQ&t=14048s

[40] обзор Laracon online winter 2022: https://www.youtube.com/watch?v=wS7fYSiPb5E

[41] hmones/laravel-digest: https://github.com/hmones/laravel-digest

[42] ellgreen/laravel-loadfile: https://github.com/ellgreen/laravel-loadfile

[43] LOAD DATA: https://dev.mysql.com/doc/refman/8.0/en/load-data.html

[44] worksome/envy: https://github.com/worksome/envy

[45] Пост: https://downing.tech/posts/keeping-your-envexample-file-updated

[46] Как найти самые медленные запросы в Laravel приложении: https://laravel.demiart.ru/how-to-find-the-slowest-queries/

[47] Yii 2.0.45: https://www.yiiframework.com/news/443/yii-2-0-45

[48] Yii Runner: https://github.com/yiisoft/yii-runner

[49] Yii Console Runner: https://github.com/yiisoft/yii-runner-console

[50] Yii HTTP Runner: https://github.com/yiisoft/yii-runner-http

[51] Yii RoadRunner Runner: https://github.com/yiisoft/yii-runner-roadrunner

[52] Как помочь с релизом Yii 3: https://telegra.ph/Kak-pomoch-s-relizom-Yii3-02-14

[53] Сергею Предводителеву: https://github.com/vjik

[54] О разных типах событий в событийных (event-driven) системах: https://blog.frankdejonge.nl/the-different-types-of-events-in-event-driven-systems/

[55] All the Dynamic Syntaxes in PHP: https://www.exakat.io/en/all-the-dynamic-syntaxes-in-php/

[56] Service locator: an anti-pattern: https://stitcher.io/blog/service-locator-anti-pattern

[57] fromName для enum: https://t.me/phpyh/284

[58] Курс по принципам SOLID на примере Laravel от CutCode: https://solid.cutcode.ru/

[59] Фонд PHP: https://opencollective.com/phpfoundation

[60] Вывернутый SOLID: https://leonidchernenko.ru/solid-inside-out/

[61] SRP или DRY?: https://otis22.github.io/srp/dry/2022/02/14/SRP-or-DRY.html

[62] Shopware получили $100 млн инвестиций от PayPal и Carlyle: https://techcrunch.com/2022/02/08/shopware-an-e-commerce-platform-that-powers-100k-brands-raises-its-first-outside-funding-100m-from-paypal-and-carlyle/

[63] $130 млн получили Spryker: https://techcrunch.com/2020/12/17/spryker-raises-130m-at-a-500m-valuation-to-provide-b2bs-with-agile-e-commerce-tools/

[64] Чем запомнился 2021 год русскоязычному PHP-сообществу — в 3000+ ответах: https://www.youtube.com/watch?v=Nx39a7n9KIQ

[65] Что смотрели и читали по PHP в 2021: список от сообщества: https://habr.com/ru/company/skyeng/blog/648669/

[66] указали: https://twitter.com/dabernathy89/status/1494325995855179776

[67] PHP Digest: https://t.me/phpdigest

[68] личку хабра: https://habrahabr.ru/conversations/pronskiy/

[69] телеграм: https://t.me/pronskiy

[70] через форму: https://bit.ly/php-digest-add-link

[71] Поиск ссылок по всем дайджестам: https://pronskiy.com/php-digest/

[72] Предыдущий выпуск: PHP-Дайджест № 221: https://habr.com/ru/post/650145/

[73] Источник: https://habr.com/ru/post/652753/?utm_source=habrahabr&utm_medium=rss&utm_campaign=652753