Код
#новости

PHP обновился до версии 8.1

Добавлены перечисления, Readonly-свойства, файберы и многое другое.

24 ноября 2021 года на сайте php.net появилось уведомление о выходе PHP 8.1.0. Это последний второстепенный выпуск, в котором разработчики существенно увеличили производительность языка и добавили множество новых функций. Посмотрим основные обновления и комментарии к релизу от пользователей Reddit.

Сравнение производительности PHP 8.1 с другими версиями языка. Изображение: php.net

В PHP 8.1 появился новый тип данных — перечисления (enum). Они заменяют набор констант и позволяют описывать структуры с фиксированным количеством значений. Это облегчает процесс прототипирования приложений и повышает надёжность кода.

enum Status
{
    case Draft;
    case Published;
    case Archived;
}
function acceptStatus(Status $status) {...}

В предыдущих версиях PHP разработчики не могли устанавливать неизменяемые объекты значений — у них не получалось один раз инициализировать нужные свойства и больше к ним не возвращаться. Приходилось делать все свойства закрытыми, использовать общедоступный геттер и жертвовать потребительской эргономикой.

Теперь можно добавлять Readonly-свойства, которые не будут менять значения объектов после инициализации. Это особенно полезно при работе с объектами значений или передачи данных, которые нужно защитить от вмешательства извне.

class BlogData
{
    public readonly Status $status;
  
    public function __construct(Status $status)
    {
        $this->status = $status;
    }
}

Следующая фича — файберы. Это низкоуровневые компоненты, которые нужны для упрощения управления параллелизмом в PHP. С помощью файберов можно находить, приостанавливать и возобновлять выполнения блоков кода из разных позиций стека. Функция получит поддержку во фреймворках ReactPHP и Amph.

$response = $httpClient->request('https://example.com/');
print json_decode($response->getBody()->buffer())['code'];

В инициализаторах появилась поддержка new-выражений, которые можно использовать внутри значений параметров, для аргументов атрибутов, вложенных атрибутов, инициализаторов статистический переменных и глобальных констант.

class MyController {
       public function __construct(
           private Logger $logger = new NullLogger(),
       ) {}
   }

Чтобы посмотреть все изменения, нужно посетить страницу официального пресс-релиза PHP 8.1. Для обновления загрузите исходный код и руководство по миграции. Если вы пишете код в PhpStorm — почитайте, какие функции из PHP 8.1 уже есть в IDE.

На Reddit основная часть разработчиков довольна тем, как развивается PHP и какие новые возможности в нём появляется. Из негативных моментов можно отметить комментарий пользователя SavishSalacious, который хочет увидеть в новой версии дженерики.

Скриншот: Reddit

Ещё можно выделить сообщение пользователя L3tum, который не спешит обновлять проекты на PHP 8.1 из-за возможных ошибок в совместимости со старыми версиями. На этот комментарий ответил jpresutti, который перевёл на новую версию PHP свой фреймворк FEAST и не обнаружил проблем. Больше это никто не обсуждал.

Скриншот: Reddit

Учись бесплатно:
вебинары по программированию, маркетингу и дизайну.

Участвовать
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована