PHP Дайджест № 207 (29 июня – 12 июля 2021)

от автора

Фото: Steve McDougall.

Подборка свежих новостей и материалов из мира 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-свойствах в подкасте audio 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 стало еще чуть проще. Подробнее в анонсе.
    <?php  require __DIR__ . '/vendor/autoload.php';  $server = new React\Http\Server(function (Psr\Http\Message\ServerRequestInterface $request) {     return new React\Http\Message\Response(         200,         [             'Content-Type' => 'text/plain'         ],         "Hello World!\n"     ); });  $socket = new React\Socket\Server('127.0.0.1:8080'); $server->listen($socket); 

Статьи

community Сообщество


Подписывайтесь на Telegram-канал PHP Digest.

Если вам понравился дайджест, поставьте, пожалуйста, ему плюс.

Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.

Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
Предыдущий выпуск: PHP-Дайджест № 206

ссылка на оригинал статьи https://habr.com/ru/post/567228/