Подборка свежих новостей и материалов из мира PHP. В выпуске: первая альфа PHP 8.1.0, Composer 2.1, Symfony 5.3 и другие релизы. Обзор новых предложений для PHP 8.1: Partial Function Application, pipe оператор, readonly свойства. А также порция полезных инструментов, статьи, видео и подкасты.
Приятного чтения!
Новости
PHP 8.1.0 alpha 1
Вышел первая альфа и тем самым стартовал рели-процесс PHP 8.1. Обновления будут выходить каждые две недели по расписанию. Финальный релиз запланирован на 25 ноября.
Заморозка фич ожидается 20 июля, а значит еще могут быть изменения. Из наиболее заметных новых фич на данный момент есть:
- Enum они же перечисления RFC;
- Новый тип
never
для возвращаемых значений RFC; - Файберы RFC;
- Финальные константы в классах RFC;
- Оператор распаковки поддерживает массивы со строковыми ключами RFC;
- Объявлено устаревшим преобразование
float
вint
, где теряется дробная часть RFC; - Интерфейс
Serializable
объявлен устаревшим RFC; - Запись восьмеричных чисел с префиксом
0o
RFC; - Ограничено использование $GLOBALS RFC;
Полный список изменений можно посмотреть на php.watch/versions/8.1.
PHP 8.0.7, PHP 7.4.20
Багфикс релизы актуальных веток.
Стартовала программа раннего доступа PhpStorm 2021.2
Каждую неделю публикуем новые билды, которые можно использовать бесплатно. А также анонсируем то, над чем идет работа в релизе.
Уже доступны: поддержка енамов PHP 8.1, переработанный и улучшенный рефакторинг Extract Method, исправлены ошибки форматирования.
Composer 2.1.0
Добавлена командаreinstall
, которая удаляет и устанавливает перечисленные зависимости заново. Также пачка других улучшений и фиксов.
У каждого пакета на packagist.org теперь есть статистика по PHP-версиям
Один из авторов Composer, Jordi Boggiano, каждые полгода публиковал в блоге пост со статистикой используемых версий PHP.
Теперь вместо блога, эта общая статистика всегда доступна на packagist.org/php-statistics.
Кроме того, у каждого пакета есть своя подобная страница, например, symfony/console/php-stats.
PHP Russia 2021
Конференция состоится уже 28 июня. Программа сформирована — ничего лишнего, только хардкор, только технологии.
Для читателей дайджеста есть промокод со скидкой: php_digest.
PHP Internals
[RFC] Partial Function Application
Предложение было существенно переработано и объединено с более узким RFC от Никиты First-class callable syntax.
Задача — получать ссылку на любую функцию или метод. При этом с помощью...
можно заменить любое число аргументов, а с помощью плейсхолдера?
— ровно один.
Итого предлагается три способа получить ссылку на функцию:
$func = some_func(...)
— так можно получить ссылку на любую функцию. Собственно, предложение Никиты.$func = some_func(1, 2, ?, 5)
— так можно получить ссылку с одним аргументом, что может быть полезно для различных колбэков.$func = any_func($all, $params, ...)
— так можно передать все аргументы в функцию, но при этом не вызывать ее. Ссылку позже можно вызвать, не передавая никаких параметров.
[RFC] Pipe Operator v2
Если предложение выше пройдет голосование, то пайп-оператор станет его логичным продолжением.
Вместо вложенных вызовов типа:
array_filter(array_map('strtoupper', str_split(htmlentities("Hello World"))), fn($v) => $v != 'O');
можно будет писать более понятные цепочки вида:
$result = "Hello World" |> htmlentities(?) |> str_split(?) |> array_map(strtoupper(?), ?) |> array_filter(?, fn($v) => $v != 'O');
[RFC] Pure intersection types
Предложение добавить пересечения типов находится на голосовании и похоже, что преодолеет необходимый порог. Тем временем можно послушать подкаст PHP Internals News #88 с George Peter Banyard, автором RFC.
[RFC] Readonly properties 2.0
В качестве альтернативы довольно сложному и громоздкому предложению по акссессорам свойств сам же Никита выдвинул на рассмотрение RFC по readonly свойствам.
Предлагается добавить модификаторreadonly
для свойств. Такие свойства нельзя будет изменить после инициализации.
Скрытый текстclass Test { public readonly string $prop; public function __construct(string $prop) { // Legal initialization. $this->prop = $prop; } } $test = new Test("foobar"); // Legal read. var_dump($test->prop); // string(6) "foobar" // Illegal reassignment. It does not matter that the assigned value is the same. $test->prop = "foobar"; // Error: Cannot modify readonly property Test::$prop
А в комбинации с constructor property promotion из PHP 8.0, можно будет сократить вообще до вот такого:
class User { public function __construct( public readonly string $name ) {} } $user = new User('Roman'); echo $user->name; // Ok $user->name = 'Nikita'; // Error
[RFC] Make reflection setAccessible() no-op
Сейчас чтобы получить доступ к свойству или методу через рефлексию, надо обязательно предварительно вызвать->setAccessible(true)
.
Marco «Ocramius» Pivetta предлагает убрать этот вызов, то естьReflectionProperty
иReflectionMethod
будут вести себя так, как если бы уже был вызванsetAccessible(true)
.
class Foo { private $bar = 'a'; } (new ReflectionProperty(Foo::class, 'bar'))->getValue();
Инструменты
- nunomaduro/php-interminal — Инструмент для чтения PHP Internals обсуждений в терминале. Пока умеет выводить только последние сообщения, но выглядит красиво.
- joonlabs/php-graphql — PHP-реализация спецификаций GraphQL. Автор утверждает, что быстрее чем другие реализации.
- spiral/attributes — Позволяет читать атрибуты из PHP 8 на PHP 7.2+ и дополнительно может работать с аннотациями доктрины. Фреймворк-агностик и для работы требует лишь nikic/php-parser. Прислал SerafimArts.
- spiral/storage — Компонент для работы с распределёнными файловыми хранилищами. Работает поверх thephpleague/flysystem и предоставляет более удобный API. Прислал SerafimArts.
- kalessil/production-dependencies-guar — Предотвращает добавление дев-пакетов в секцию
require
в composer.json.
В тему у Валентина Удальцова на канале «Пых» была заметка с идеями проверок на CI.
Symfony
- Релизнут Symfony 5.3 — Что нового можно посмотреть на сайте Symfony. Также есть выпуск PHP Release Radar #11: Symfony 5.3, где Nicolas Grekas рассказывает про релиз.
- Symfony Messenger: объединение сообщений в пакеты.
- Развертывание приложения Symfony в AWS Lambda.
- Неделя Symfony #754 (7-13 июня 2021).
Laravel
- Laravel исполнилось 10 лет — Забавно посмотреть на код первого релиза.
- Event Sourcing для Laravel — Платный курс от ребяток из Spatie. Стрим с обзором курса.
- Паттерн «Двойная диспетчеризация».
- Пагинация: Offset против Cursor.
- Пара видео от Mohamed Said, участник core-команды Laravel: Database Connections in Laravel — Beyond the Basics, What's New in Laravel (#2).
- Larastreamers.com — Календарь стримов от ларавельщиков.
Yii
- Релизнут Yii 1.1.24 и продлена секьюрити поддержка Yii 1 — Первая версия фреймворка будет получать фиксы совместимости и секьюрити патчи до конца 2023 года.
- yiisoft/rate-limiter — Новый компонент из Yii 3.
Статьи
- Бенчмарк PHP роутеров с интересными деталями: nikic/FastRoute против symfony/routing.
- Почему в PHP нужны короткие многострочные замыкания — В тему голосования по RFC Short Closures.
- Как оптимизировать ORDER BY RANDOM().
- Зачем нужен static при объявлении анонимных функций? — Отличная заметка от автора телеграм-канала Beer::PHP.
- Как в PHP улучшить читаемость регулярных выражений.
- Кто, где, когда: система компонентов для разделения зон ответственности команды.
- Модульный PHP монолит: рецепт приготовления.
Аудио/Видео
- PHP Internals News #87 — C Никитой Поповым про отмену тиков.
- PHPTownhall Episode 81: The Book of Psalm — Выпуск подкаста с Matthew Brown, автором псалма.
- Регулярные стримы дайджеста пока на каникулах, зато прошел отличный внезапный стрим по мотивам весенних PHP Дайджестов от Валентина Удальцова:
Подписывайтесь на Telegram-канал PHP Digest.
Если вам понравился дайджест, поставьте, пожалуйста, ему плюс — это очень мотивирует продолжать делать.
Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.
Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 204