Подборка свежих новостей и материалов из мира 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
- Symfony поддержка теперь доступна в разделе Discussions на GitHub.
- Централизованный контроль доступа в Doctrine/Symfony.
- Как использовать каскадное удаление в Doctrine и не потерять все данные.
- Неделя Symfony #763 (9-15 августа 2021).
Laravel
- Laravel Idea 4.4 — Большое обновление плагина для PhpStorm.
Еще Адель теперь ведет отдельный канал в телеграме про плагин @laravel_idea, где делится фичами, над которыми работает сейчас. Там же можно их обсуждать.
- Laracon Online — Запланирован на 1 сентября.
- aimeos/aimeos-laravel — Мощный e-com движок на базе Laravel.
- Создание приложения для масштабирования на Laravel Vapor.
- Что нового в Laravel v8.53.0
- Иммутабельные даты в Laravel
- Финальное слово про Laravel Nova
Yii
- Yii2: Вышел релиз 2.0.43 со множеством исправлений и улучшений.
- Yii 3: пред-релизная поддержка компаний — Команда отвечает на любые вопросы по фреймворку, собирает пожелания и критику.
Статьи
- Нам не нужны проверки типов в рантайме — Интересные размышления о развитии типов в PHP от Brent Roose c цитатами от Сары Гоулмон, Расмуса Лердорфа, Никиты Попова.
А вот еще мнение на эту тему от Joe Watkins:
- Эволюция объекта в PHP от версии к версии
- phpschool.io: PHP 8 Appreciate — Консольный воркшоп для изучения PHP 8.
- Строим систему доменных событий в модульном монолите
- If-else-switch
- Перечисления в PHP 8.1
- Отказоустойчивое взаимодействие с внешними сервисами
- Создаем Конечный Автомат на PHP
Аудио/Видео
- Пятиминутка PHP: Разработка больших проектов на Битрикс — Иван Поддубный из компании Вебпрактик рассказывает про свой опыт разработки крупных проектов на Битрикс и сравнивает с другими фреймворками (Laravel) и стеками технологий.
- Как делать Code review — Александр Макаров
- Event Sourcery Full Course — Вводный курс по CQRS и Event Sourcing.
- PHP Roundtable 82 — Возвращение популярного подкаста про PHP. В целом в выпуске просто треп, но есть немного про PHP 8.1 от Sara Golemon.
Подписывайтесь на Telegram-канал PHP Digest.
Этот дайджест подготовлен совместно с Insolita. Если вам понравился выпуск, поставьте, пожалуйста, ему плюс.
Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.
Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 208
Автор: Роман Пронский