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

x9w1x14hetqtm5otlbpv-khvgvu.jpeg
Фото: Steve McDougall.

Подборка свежих новостей и материалов из мира PHP.
В выпуске: третья альфа PHP 8.1 — список новых возможностей и статус последних предложений; readonly-свойства и проблемы с клонированием; автор Psalm покинул проект и PHP — работу подхватили другие мейнтейнеры; Laravel 9 выйдет в январе и будет требовать PHP 8.0. А также другие новости, порция полезных инструментов, статьи и видео.

Приятного чтения!

meidpksjztqawpy47dfyf2djaig.png Новости


  • 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

vd22tfegfi8rr3njuljlr-94why.png 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-свойствах в подкасте audioPHP 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;
    }
    

meu9xukzxff8r_9frujrgl0eclu.png Инструменты


  • thecodingmachine/safe8 — Все стандартные функции PHP, обернутые так, чтобы они бросали исключения, а не возвращали false.
  • humbug/php-scoper — Инструмент добавляет префикс ко всем неймспейсам в указанной папке. Может пригодиться, когда необходимо использовать несколько версий одного пакета. Подробнее в посте.
  • IvanGrigorov/VMValidator — Простой валидатор на основе атрибутов PHP 8, если вдруг вам не нравится symfony/validator.
  • voku/anti-xss — Пакет для защиты от XSS с простым API.

96b65e92179a40f2bd1884549973ddd5.png Symfony


314bd0f0dfc54e3fa7f0c0daef1a2d25.png Laravel


732rpqll-yvu0hrtaw6yeism-de.png 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);
    

4dxztg-x7krqwoqw9ln1p_lfzno.png Статьи


community Сообщество





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

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

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

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

© Habrahabr.ru