Pull to refresh

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

Website development *PHP *Symfony *Yii *Laravel *
Фото: Florian Engelhardt.

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

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

Новости


  • 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 с путями файлов от пользователя. Это нужно для поддержки загрузки каталогов.


    Картинка 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 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.


Инструменты


  • 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.


Symfony




Laravel




Yii




Статьи




Аудио/Видео





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

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

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

Tags:
Hubs:
Total votes 54: ↑54 and ↓0 +54
Views 10K
Comments Comments 5