Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 8 Alpha 3, PhpStorm 2020.2, новый оператор ?->
, снова обсуждение синтаксиса атрибутов и другие новости PHP Internals, обзор системы типов в PHP, порция полезных инструментов, видео, стримы и многое другое.
Приятного чтения!
Новости и релизы
- PHP 8.0.0 Alpha 3 — Последний альфа-релиз из запланированных. Первая бета ожидается 6 августа.
- Релиз PhpStorm 2020.2 — Объединенные типы PHP 8, новый движок потока управления, пул-реквесты GitHub, OpenAPI. По ссылке подробный разбор этих и других изменений.
PHP Internals
- [RFC] Shorter Attribute Syntax Change — История с синтаксисом атрибутов в PHP 8 продолжается. Предыстория была в канале.
Вкратце: сначала был<< >>
, переголосовали за@@
, а теперь новый виток обсуждений.
У@@
были проблемы с парсером, но они решены благодаря нижеупомянутому RFC про неймспейсы. Тем не менее у него есть другие проблемы, и в качестве альтернативы предлагался вариант#[ ]
как в Rust, но и у него есть минусы.
Дошло до того, что рассматривается вариант переголосования за новый синтаксис и перенос атрибутов в PHP 8.1, потому что фиче-фриз для 8.0 уже 4 августа. То есть либо в PHP 8.0, но с одним из<< >>
,#[]
,@@
, либо в PHP 8.1 с чем угодно.
Для последнего случая предлагаются самые разные новые варианты:@[Attribute]
, в комментарии PHPDoc с двойной собачкой/** @@MyAttribute */
, или даже маловероятный — переделать оператор подавления ошибок из@
в@@
, а одинарную@
использовать в атрибутах.
Еще забавно, что в ответ на письмо Дерика об ужасности@@
, кто-то написал, чтоT_PAAMAYIM_NEKUDOTAYIM
тоже ужасен, но не тут-то было — в PHP 8 Alpha 3 он уже не отображается для пользователя. - [RFC] Treat namespaced names as single token — В PHP 8 весь неймспейс считается одним токеном. Это позволяет использовать внутри неймспейса ключевые слова, например,
namespace app\function { class Foo {} }
и избавляет от потенциальных проблем обратной совместимости при введении новых ключевых слов.
Надеюсь, вам такое не приходилось встречать, но с этим изменением неймспейсы не могут содержать комментарии:use /** Try comments */ \FullyQualified \ /* in this ugly way */ SometTotallyDifferentTrait /** also after */;
- [RFC] Saner string to number comparisons — Почти единогласно прошло предложения ломающее обратную совместимость.
В PHP 8, при сравнении чисел и строк с помощью нестрогого==
оба операнда приводятся к строке и сравниваются как строки, если один из них не является числовой строкой.
0 == 'foobar'
теперь официальноfalse
.
Это также влечет за собой изменение поведения всех операторов сравнения<=>
,==
,!=
,>
,>=
,<
и<=
, конструкцииswitch
, функций типаin_array()
,sort()
и других. - [RFC] Nullsafe operator — В PHP 8 будет новый оператор nullsafe:
?->
.
C ним вместо пачки вложенных условий можно обращаться к свойству или методу с проверкой наnull
.
Например, такой приватный метод с кучей условий:Скрытый текстможно будет заменить одной строкой:private function getUserCountry(): ?string { $session = $this->sessionStorage->getSession(); if (null === $session) { return null; } $user = $session->getUser(); if (null === $user) { return null; } if (null === $user->address) { return null; } return $user->address->country; }
$country = $this->sessionStorage->getSession()?->getUser()?->address?->country;
Прислал Валентин Удальцов (@Пых). - [RFC] Allow trailing comma in closure use lists — В конце списка use у замыканий в PHP 8 можно будет оставлять запятую по аналогии с тем, как это уже работает для аргументов и параметров функций. Скрытый текст
$f = function ( $longArgument, $longerArgument, $muchLongerArgument, ) use ( $longVar1, $longerVar2, $muchLongerVar3, // Вот тут теперь тоже можно запятую ) { ... };
- [RFC] Named Arguments — В PHP 8 будут именованные аргументы!
Теперь можно будет передавать значения в функцию или метод на основе имени параметра, а не только его позиции.
станет:htmlspecialchars($string, ENT_COMPAT | ENT_HTML401 , ini_get("default_charset"), false);
htmlspecialchars($string, double_encode: false);
Подробнее об именованных аргументах в посте stitcher.io/blog/php-8-named-arguments. - [RFC] Renamed Parameters — Проблема переименования параметров методов была основным камнем преткновения в обсуждении именованных аргументов. Именно ее пытается решить автор этого RFC.
Предлагается добавить возможность указывать внутреннее и внешнее имя параметра через двоеточие:function callBar(Foo $internalName:externalName) { $internalName->bar(); } $x = new Foo(); callBar(externalName: $x);
Что-то подобное есть в Swift. В качестве альтернативы, возможно решение в виде атрибута@@NameAlias
. - [RFC] Make constructors and destructors return void — Отклонен.
Инструменты
- ramsey/conventional-commits — Библиотека для валидации сообщений коммитов согласно спецификации Conventional Commits. Кстати, интересная спецификация.
- jubianchi/ppc — Генератор парсеров. Альтернативное решение phplrt/phplrt.
- thephpleague/mime-type-detection — Мини-библиотека для определения mime-типа файла.
- zakirullin/typed-accessor — Обертка над скалярными значениями для получения данных более безопасно.
- nette/php-generator — Генератор PHP-кода с fluent-интерфейсом.
Symfony
- Неделя Symfony #709 (27 июля — 2 августа 2020)
- Using Symfony's service iterators for secondary flows
- Symfony 4.3 и 5.0 Больше не поддерживаются:
Laravel
- Секьюрити апдейт Laravel 6 и 7 — В Laravel обнаружена уязвимость в куках сессий и выпущены обновления для 6 и 7. Пользователям Laravel 5.5 рекомендуется не использовать драйвер сессий 'cookie'.
- butschster/LaravelCycleORM — Интеграция cycle/orm в Laravel.
- Годная инструкция как перенести легаси-приложение на Laravel.
- Подсистема событий как способ избавиться от задач по «допилу».
- Laravel-Дайджест (27 июля – 2 августа 2020)
- Стрим с Nuno Maduro и Freek Murze по конвертации тестов из чистого PHPUnit в Pest.
- Видеозаписи Laracon EU Online 2020
Материалы для обучения
- Все что необходимо знать о системе типов в PHP — Отличный подробный пост о типах в PHP со всеми деталями и особенностями.
- PHP 8: примеры кода до и после.
- О проблемах покрытия кода и как его улучшить — Покрытие веток, путей, метрики.
- PHP: Preloading — Manual — Наконец-то доступна подробная документация по предзагрузке, добавленной в PHP 7.4.
- Рассылка PhpStorm, But Better! #2 — О кастомизации интерфейса.
- LearnXdebug.com — Подборка ресурсов по Xdebug.
- Почему плохо надеяться на БД для валидации данных (уникальные ключи, ненулевое значение, внешние ключи) и что лучше делать вместо этого.
- Что нужно учесть при миграции с MySQL в Postgres.
- Пишем простейший сервис генерации заглушек изображений.
- PHP Internals News Эпизод #38: предзагрузка и WeakMaps.
- Порядок вычисления в PHP.
- Уязвимости PHP-фреймворков.
- Вы уверены, что пишете объектно-ориентированный код?
Аудио/Видео
- Подкаст PHP Internals News #63 — С Andre Romcke о предложении указывать модификатор доступа отдельно на чтение и запись для свойств.
- Подкаст PHP Internals News #64 — С Benjamin Eberlei обо всех новых обсуждениях вокруг атрибутов.
- Стрим с Дериком по работе с Xdebug — Настройка на Laravel Valet и PhpStorm, профайлинг, отладка, и советы.
- ХудоБедно учим онлайн с Дмитрием Елисеевым — 3 августа в 17.00, новый формат стримов с Антоном Моревым и Сергеем Жуком.
- MoreView #12 | Дмитрий Елисеев — Основатель elisdn.ru и deworker.pro. Про PHP, фреймворки, обучение и прочее.
- MoreView #13 | Валентин Удальцов — Автор канала «Пых» и ведущий разработчик в Happy Job.
- Поиск и устранение утечек памяти в PHP — Запись стрима с Валентином Удальцовым.
- Пятиминутка PHP №81 с обзором rectorphp/rector — Теперь короткие выпуски Пятиминутки также в Instagram и TikTok.
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту, в твиттер или телеграм pronskiy.
Больше новостей и комментариев в Telegram-канале PHP Digest.
Прислать ссылку
Поиск ссылок по всем дайджестам
< Предыдущий выпуск: PHP-Дайджест № 184
dmitry_budnitski
спасибо за подборку!