Pull to refresh

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

Reading time4 min
Views8.6K
Фото: 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

Tags:
Hubs:
Total votes 40: ↑40 and ↓0+40
Comments21

Articles