PHP Дайджест № 207 (29 июня – 12 июля 2021)
Подборка свежих новостей и материалов из мира PHP.
В выпуске: третья альфа PHP 8.1 — список новых возможностей и статус последних предложений; readonly-свойства и проблемы с клонированием; автор Psalm покинул проект и PHP — работу подхватили другие мейнтейнеры; Laravel 9 выйдет в январе и будет требовать PHP 8.0. А также другие новости, порция полезных инструментов, статьи и видео.
Приятного чтения!
Новости
PHP 8.1.0 alpha 3
Третья и последняя альфа доставлена по расписанию. Следующим выпуском будет первая бета PHP 8.1.Что нового будет в PHP 8.1- Enum они же перечисления RFC;
- Новый тип
never
для возвращаемых значений RFC; - Файберы RFC;
- Финальные константы в классах RFC;
- Оператор распаковки поддерживает массивы со строковыми ключами RFC;
- Объявлено устаревшим преобразование
float
вint
, где теряется дробная часть RFC; - Интерфейс
Serializable
объявлен устаревшим RFC; - Запись восьмеричных чисел с префиксом
0o
RFC; - Ограничено использование $GLOBALS RFC;
Полный список изменений можно посмотреть на php.watch или stitcher.io.Под вопросом остаются еще следующие фичи:
- Обновления актуальных веток: PHP 8.0.8, PHP 7.4.21, PHP 7.3.29
PHP Internals
[RFC] Readonly properties 2.0
В качестве альтернативы довольно сложному и громоздкому предложению по акссессорам свойств, Никита выдвинул на голосование RFC поreadonly
-свойствам.Предлагается добавить модификатор
readonly
для свойств. Такие свойства нельзя будет изменить после инициализации.class User { public function __construct( public readonly string $name ) {} } $user = new User('Nikita'); echo $user->name; // Ok $user->name = 'Roman'; // Error
Подробнее о readonly-свойствах в подкасте PHP Internals News #90 с Никитой Поповым.Споры при голосовании разгорелись из-за того, что
readonly
-свойства не очень хорошо сочетаются с клонированием:
Пример:class Point { public function __construct( public readonly float $x, ) {} public function withX(float $x): static { // Вот так сработает: return new static($x); // А вот так не будет работать: $clone = clone $this; $clone->x = $x; // Error: Cannot modify readonly property return $clone; } }
В будущем для решения этой проблемы, возможно, будет добавлена конструкцияclone with
или ассиметричные модификаторы доступа.А пока Brent Roose из Spatie предложил трейт Cloneable.
Кстати, тот же Brent Roose отметил, что с введением readonly-свойств, кажется неплохой идеей разрешить такие свойства в интерфейсах:
interface HasUuid { public readonly string $uuid; }
Инструменты
- thecodingmachine/safe8 — Все стандартные функции PHP, обернутые так, чтобы они бросали исключения, а не возвращали
false
. - humbug/php-scoper — Инструмент добавляет префикс ко всем неймспейсам в указанной папке. Может пригодиться, когда необходимо использовать несколько версий одного пакета. Подробнее в посте.
- IvanGrigorov/VMValidator — Простой валидатор на основе атрибутов PHP 8, если вдруг вам не нравится symfony/validator.
- voku/anti-xss — Пакет для защиты от XSS с простым API.
Symfony
Laravel
Async PHP
- Вышел reactphp/event-loop v1.2.0, в котором сделан дефолтный цикл событий. Начать писать асинхронные приложения на PHP стало еще чуть проще. Подробнее в анонсе.
'text/plain' ], "Hello World!\n" ); }); $socket = new React\Socket\Server('127.0.0.1:8080'); $server->listen($socket);
Статьи
Сообщество
Подписывайтесь на Telegram-канал PHP Digest.
Если вам понравился дайджест, поставьте, пожалуйста, ему плюс.
Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.
Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP-Дайджест № 206