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

PHP Дайджест № 209 (1 – 16 августа 2021)

PHP Дайджест № 209 (1 – 16 августа 2021) - 1

Фото: Florian Engelhardt [1].

Подборка свежих новостей и материалов из мира PHP. В выпуске: вторая бета PHP 8.1 и много материалов об этой версии, два свежих RFC для PHP 8.2, ReactPHP и Amphp объединяют усилия над базой для асинхронного PHP. А также другие новости и релизы, порция полезных инструментов, статьи и видео.

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

PHP Дайджест № 209 (1 – 16 августа 2021) - 2 Новости

  • PHP 8.1.0 beta 2 [2]

    Подъехала уже вторая бета с несколькими фиксами [3]. Следующая бета ожидается 19 августа [4].

    [RFC] Nullable Intersection types [5] — Судя по ходу голосования, не проходит в PHP 8.1: function setBar((X&Y)|null $bar = null): (X&Y)|null.

    Об основных новых фичах можно прочитать в рассылке от Brent Roose: The Road to PHP 8.1 [6].

    Также отличный перевод habr PHP 8.1: до и после [7].

    И полное описание изменений есть на PHP.Watch: php.watch/versions/8.1 [8].

    Кстати, там же был пост Directory Uploads in PHP 8.1 [9] — В PHP 8.1 массив $_FILES будет содержать секцию full_path с путями файлов от пользователя. Это нужно для поддержки загрузки каталогов.

    PHP Дайджест № 209 (1 – 16 августа 2021) - 4
    Картинка Peter Kokot [10].

  • ReactPHP и AmpPHP объединяют силы

    С добавлением файберов в PHP 8.1 можно будет сделать асинхронный код на PHP чуть проще и красивее. Мейнтейнеры двух популярных библиотек для асинхронного PHP объявили о создании проекта RevoltPHP. В рамках него планируют сделать общий ивент луп и удобную абстракцию над файберами.

  • Вышел PhpStorm 2021.2 [11]

    В релизе дженерики, перечисления, array shapes, новые инспекции и рефакторинги.

  • PHP 7.4.22 [12], PHP 8.0.9 [13]

    Обновления актуальных веток.

  • 4 сентября — PHP fwdays'21 Online [14]

    Совсем скоро пройдёт традиционная конференция от fwdays. Предварительная программа [15] есть на сайте: Temporal, как оптимизировать тесты, про запрет наследования, и прочее.

    Будет бесплатная трансляция всех докладов в день проведения (нужно зарегистрироваться).

    Есть дополнительные платные бонусы. Для них можно использовать промокод: HABRDIGEST.

PHP Дайджест № 209 (1 – 16 августа 2021) - 5 PHP Internals

  • [RFC] Unwrap reference after foreach [16]

    В текущих версиях PHP нет выделенного скоупа у циклов foreach. У этого есть очень контринтуитивное следствие: ссылка на значение $value и последний элемент массива остаются даже после завершения цикла foreach.

    Проблему легко проиллюстрировать вот таким примером:

    $array = [0, 1, 2];
    foreach ($array as &$value) { /* ... */ }
    // без вызова unset($value), $value все еще указывает на последний элемент: $arr[2]
    foreach ($array as $value) {
        // $arr[2] каждый раз будет обновляться значениями $array
    }
    var_dump($array);
    
    // До RFC:
    >
    array(3) {
      [0] => int(0)
      [1] => int(1)
      [2] => &int(1)
    }
    
    // После RFC:
    > array(3) {
      [0] => int(0)
      [1] => int(1)
      [2] => int(2)
    }
    

    В данном RFC предлагается исправить это логически правильное, но выглядящее как баг поведение. После цикла foreach ссылка на $value будет убираться.

  • [RFC] Never For Parameter Types [17]

    В PHP 8.1 принят новый тип never для возвращаемых значений. И вот для 8.2 уже поступило предложение использовать never в качестве типа для параметров.

    Тип never, по сути, становится самым базовым типом в иерархии, поэтому автор, Jordan LeDoux, считает, что он будет полезен в абстрактных классах и интерфейсах.

    С помощью него можно указать, что параметр обязательно должен быть как-то типизирован. Например, это может быть удобно для имитации поведения дженериков. Правда придётся прибегнуть к описаниям типов в PHPDoc для статических анализаторов и PhpStorm.

    interface CollectionInterface {
        public function add(never $input): self;
    }
    
    class A implements CollectionInterface {
        public function add(int $input): self {}
    }
    

    Аналогично ведет себя тип never в TypeScript, а в Scala, например, в качестве подобного базового типа используется Nothing.

PHP Дайджест № 209 (1 – 16 августа 2021) - 6 Инструменты

  • frontdevops/php-evil [18] — Расширение для отключения eval(). Оказывается, eval() – это не функция, а языковая конструкция, поэтому disable_functions не поможет. Автору пришлось написать собственное расширение. Подробнее в статье [19]. Спасибо Пятиминутка PHP [20] за наводку.
  • PHP-CSS-Parser [21] — Парсер CSS-файлов
  • Вышел первый комьюнити-релиз Psalm [22], выпущенный после ухода основателя проекта.
  • ergebnis/composer-normalize [23] — Плагин для Composer для приведения в красивый вид файла composer.json.
  • paragonie/paseto 2.0 [24] — Stateless-токен, безопасная альтернатива JWT.
  • chrome-php/chrome v1.0.0 [25] — Пакет для работы с chrome/chromium в режиме headless.
  • darsyn/ip [26] — Иммутабельные value object для работы с IP-адресами и хелперы для Doctrine.
  • MadLisp [27] — Интерпретатор Lisp, реализованный на PHP.

PHP Дайджест № 209 (1 – 16 августа 2021) - 7 Symfony

PHP Дайджест № 209 (1 – 16 августа 2021) - 8 Laravel

PHP Дайджест № 209 (1 – 16 августа 2021) - 12 Yii

PHP Дайджест № 209 (1 – 16 августа 2021) - 13 Статьи

PHP Дайджест № 209 (1 – 16 августа 2021) - 19 Аудио/Видео


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

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

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

Прислать ссылку можно через форму [59] или просто написав мне в телеграм [58].
Поиск ссылок по всем дайджестам [60]
Предыдущий выпуск: PHP-Дайджест № 208 [61]

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

Источник [62]


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

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

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

[1] Florian Engelhardt: https://twitter.com/realFlowControl/status/1418530115127062530/photo/1

[2] PHP 8.1.0 beta 2: https://www.php.net/archive/2021.php#2021-07-22-1

[3] фиксами: https://github.com/php/php-src/blob/php-8.1.0beta2/NEWS

[4] ожидается 19 августа: https://wiki.php.net/todo/php81#timetable

[5] [RFC] Nullable Intersection types: https://wiki.php.net/rfc/nullable_intersection_types

[6] The Road to PHP 8.1: https://road-to-php.com/

[7] PHP 8.1: до и после: https://habr.com/ru/post/569652/

[8] php.watch/versions/8.1: https://php.watch/versions/8.1

[9] Directory Uploads in PHP 8.1: https://php.watch/articles/php81-directory-uploads

[10] Peter Kokot: https://twitter.com/peter_kokot/status/1418240902737317889

[11] PhpStorm 2021.2: https://habr.com/ru/company/JetBrains/blog/571962/

[12] PHP 7.4.22: https://www.php.net/ChangeLog-7.php#7.4.22

[13] PHP 8.0.9: https://www.php.net/ChangeLog-8.php#8.0.9

[14] 4 сентября — PHP fwdays'21 Online: https://fwdays.com/en/event/php-fwdays-2021?utm_source=infop-habrdigest&utm_medium=post&utm_campaign=php-fwdays-2021

[15] программа: https://fwdays.com/en/event/php-fwdays-2021#speakers-event

[16] [RFC] Unwrap reference after foreach: https://wiki.php.net/rfc/foreach_unwrap_ref

[17] [RFC] Never For Parameter Types: https://wiki.php.net/rfc/never_for_parameter_types

[18] frontdevops/php-evil: https://github.com/frontdevops/php-evil

[19] статье: https://tech.geekjob.ru/disable-evil-eval-in-php-8/

[20] Пятиминутка PHP: https://twitter.com/5minphp/status/1425741161872961541

[21] PHP-CSS-Parser: https://github.com/sabberworm/PHP-CSS-Parser

[22] первый комьюнити-релиз Psalm: https://github.com/vimeo/psalm/releases/tag/4.9.0

[23] ergebnis/composer-normalize: https://github.com/ergebnis/composer-normalize

[24] paragonie/paseto 2.0: https://github.com/paragonie/paseto/releases/tag/v2.0.0

[25] chrome-php/chrome v1.0.0: https://github.com/chrome-php/chrome

[26] darsyn/ip: https://github.com/darsyn/ip

[27] MadLisp: http://madlisp.com/

[28] теперь доступна в разделе Discussions: https://github.com/symfony/symfony/discussions/42363

[29] Централизованный контроль доступа в Doctrine/Symfony: https://medium.marco.zone/doctrine-symfony-centralized-access-control-d1f4717734e5

[30] Как использовать каскадное удаление в Doctrine и не потерять все данные: https://medium.com/accesto/how-to-delete-not-to-delete-yourself-accesto-blog-9c252f684db5

[31] Неделя Symfony #763 (9-15 августа 2021): https://symfony.com/blog/a-week-of-symfony-763-9-15-august-2021

[32] Laravel Idea 4.4: https://laravel-idea.com/blog/2021/4-4-release

[33] @laravel_idea: https://t.me/laravel_idea

[34] Laracon Online: https://laracon.net/

[35] aimeos/aimeos-laravel: https://github.com/aimeos/aimeos-laravel

[36] Создание приложения для масштабирования на Laravel Vapor: https://dyrynda.com.au/blog/scaling-on-laravel-vapor

[37] Что нового в Laravel v8.53.0: https://www.youtube.com/watch?v=8Iz1UqSbpwA

[38] Иммутабельные даты в Laravel: https://laravel.demiart.ru/immutable-dates/

[39] Финальное слово про Laravel Nova: https://donnainsolita.medium.com/%D1%84%D0%B8%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5-%D1%81%D0%BB%D0%BE%D0%B2%D0%BE-%D0%BF%D1%80%D0%BE-laravel-nova-95bd3f9766a8

[40] Yii2: Вышел релиз 2.0.43: https://www.yiiframework.com/news/378/yii-2-0-43

[41] Yii 3: пред-релизная поддержка компаний: https://rmcreative.ru/blog/post/yii-3-pred-reliznaja-podderzhka-kompaniy?utm_medium=feed

[42] Нам не нужны проверки типов в рантайме: https://stitcher.io/blog/we-dont-need-runtime-type-checks

[43] Эволюция объекта в PHP от версии к версии: https://stitcher.io/blog/evolution-of-a-php-object

[44] phpschool.io: PHP 8 Appreciate: https://www.phpschool.io/blog/2021/07/24/introducing-php-8-appreciate

[45] Строим систему доменных событий в модульном монолите: https://habr.com/ru/company/ispring/blog/569648/

[46] If-else-switch : https://habr.com/ru/company/otus/blog/569866/

[47] Перечисления в PHP 8.1 : https://habr.com/ru/post/570508/

[48] Отказоустойчивое взаимодействие с внешними сервисами : https://habr.com/ru/company/ispring/blog/559416/

[49] Создаем Конечный Автомат на PHP : https://habr.com/ru/post/572040/

[50] Разработка больших проектов на Битрикс: https://5minphp.ru/episode91/

[51] Как делать Code review — Александр Макаров: https://youtu.be/Ha9f4e-AR8M?t=1152

[52] Event Sourcery Full Course: https://www.youtube.com/playlist?list=PLQuwqoolg4aI6v1GvtRg3NgT0PBBHVqii

[53] PHP Roundtable 82: https://www.youtube.com/watch?v=EeRIM8Kz2rw

[54] немного про PHP 8.1: https://youtu.be/EeRIM8Kz2rw?t=2750

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

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

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

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

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

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

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

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