PHP Дайджест № 205 (1 – 15 июня 2021)
Подборка свежих новостей и материалов из мира 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
Laravel
Yii
Статьи
Аудио/Видео
Подписывайтесь на Telegram-канал PHP Digest.
Если вам понравился дайджест, поставьте, пожалуйста, ему плюс — это очень мотивирует продолжать делать.
Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.
Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 204