- PVSM.RU - https://www.pvsm.ru -
Подборка свежих новостей и материалов из мира PHP. В выпуске: вторая бета PHP 8.1 и много материалов об этой версии, два свежих RFC для PHP 8.2, ReactPHP и Amphp объединяют усилия над базой для асинхронного PHP. А также другие новости и релизы, порция полезных инструментов, статьи и видео.
Приятного чтения!
Подъехала уже вторая бета с несколькими фиксами [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].
Также отличный перевод 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
с путями файлов от пользователя. Это нужно для поддержки загрузки каталогов.
Картинка Peter Kokot [10].
С добавлением файберов в PHP 8.1 можно будет сделать асинхронный код на PHP чуть проще и красивее. Мейнтейнеры двух популярных библиотек для асинхронного PHP объявили о создании проекта RevoltPHP. В рамках него планируют сделать общий ивент луп и удобную абстракцию над файберами.
В релизе дженерики, перечисления, array shapes, новые инспекции и рефакторинги.
Обновления актуальных веток.
Совсем скоро пройдёт традиционная конференция от fwdays. Предварительная программа [15] есть на сайте: Temporal, как оптимизировать тесты, про запрет наследования, и прочее.
Будет бесплатная трансляция всех докладов в день проведения (нужно зарегистрироваться).
Есть дополнительные платные бонусы. Для них можно использовать промокод: HABRDIGEST.
В текущих версиях 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
будет убираться.
В 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
.
eval()
. Оказывается, eval()
– это не функция, а языковая конструкция, поэтому disable_functions
не поможет. Автору пришлось написать собственное расширение. Подробнее в статье [19]. Спасибо Пятиминутка PHP [20] за наводку.composer.json
.Еще Адель теперь ведет отдельный канал в телеграме про плагин @laravel_idea [33], где делится фичами, над которыми работает сейчас. Там же можно их обсуждать.
А вот еще мнение на эту тему от Joe Watkins:
Подписывайтесь на 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
Нажмите здесь для печати.