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

в 14:10, , рубрики: laravel, php, PHP 8.1, php-дайджест, symfony, yii, дайджест, Разработка веб-сайтов

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

Фото: Florian Engelhardt.

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

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

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

  • PHP 8.1.0 beta 2

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

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

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

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

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

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

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

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

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

  • Вышел PhpStorm 2021.2

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

  • PHP 7.4.22, PHP 8.0.9

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

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

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

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

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

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

  • [RFC] Unwrap reference after foreach

    В текущих версиях 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

    В 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 — Расширение для отключения eval(). Оказывается, eval() – это не функция, а языковая конструкция, поэтому disable_functions не поможет. Автору пришлось написать собственное расширение. Подробнее в статье. Спасибо Пятиминутка PHP за наводку.
  • PHP-CSS-Parser — Парсер CSS-файлов
  • Вышел первый комьюнити-релиз Psalm, выпущенный после ухода основателя проекта.
  • ergebnis/composer-normalize — Плагин для Composer для приведения в красивый вид файла composer.json.
  • paragonie/paseto 2.0 — Stateless-токен, безопасная альтернатива JWT.
  • chrome-php/chrome v1.0.0 — Пакет для работы с chrome/chromium в режиме headless.
  • darsyn/ip — Иммутабельные value object для работы с IP-адресами и хелперы для Doctrine.
  • MadLisp — Интерпретатор 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.

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

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

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

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

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js