PHP Дайджест № 209 (1 – 16 августа 2021)
Фото: 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.
Также отличный перевод 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