До 30 ноября

Скидки до 81 000 руб и вторая профессия в подарок!

Главная | Все статьи | Мотивация

Вышла новая версия PHP 8.1. Что в ней важного?

Время чтения статьи ~3 минуты 7
Вышла новая версия PHP 8.1. Что в ней важного? главное изображение

Разработчики представили новую версию языка программирования PHP 8.1. Вместе с преподавателем Хекслета Владленом Гилязетдиновым рассказываем о важных изменениях и объясняем, почему ее так долго ждали.

Самое важное

Перечисления

Введение Enum избавляет от необходимости использовать костыльные решения (например, создавать перечисления из классов) и подтягивать сторонние пакеты. Обновление действительно ждали — об этом свидетельствует популярность руководств по реализации перечислений в PHP и библиотек Enum и PHP-enum.

Перечисление в виде типа дает контроль над кодом, помогает соблюдать принцип DRY и снизить сложность восприятия кода.

Предположим, что приложение должно учитывать времена года. Хорошо, если они реализованы в виде строк (например, $season = 'winter'), но если речь идет о числах в виде $season = 0, код очень скоро начинает вызывать вопросы. Строки и числа, используемые для перечислений, тяжело валидировать. Для каждой функции, в которую приходит строка или число $enumVar, нужно проверять, что все работает хорошо. С Enum валидация становится проще:

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

Readonly-свойства

Фича полезна при реализации объектов типа value и data transfer. Она предназначена для работы с вычисляемыми значениями и позволяет не беспокоиться, что значение будет перезаписано.

При организации классов бывают случаи, когда нужна «вычисляемая константа». В предыдущих версиях разработчик создавал функцию, которая вызывается каждый раз, когда нужно получить значение константы, и забивает стек вызовов. Альтернативное решение — использование статистических переменных, которые повышают вероятность ошибки из-за своей изменчивости. Readonly поможет однозначно понять, что переменную присвоили, и работать с ее значением.

class BlogData
{
    public readonly Status $status;

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

Файберы

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

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

Файбер вряд ли будет широко использоваться при разработке ПО на высоких уровнях. Но на более низких (фреймворки Laravel, Symfony, Yii2, etc; пакеты для асинхронной работы ReactPHP и Amp) они точно будут полезны. В частности, для повышения производительности, переписывания части блоков кода с yield и, возможно, для переписывания реализаций корутин на основе генератора.

Новые функции

  • Array_is_list — функция помогает проверить, что ключи элементов массива это числа идущие по порядку от 0.
  • fsync и fdatasync — функции дополнительной проверки при редактировании файла, которые синхронизируют изменения. Интересно, что на Windows разницы между функциями нет: fdatasync в данном случае — ссылка на fsync.
  • Serializable становится deprecated — после перехода на новую версию придется удалить из кода implements Serializable и поменять все функции serialize()/unserialize() на __serialize()/__unserialize()
  • resource становится deprecated — если resource использовался в коде, при переходе на новую версию придется менять все вхождения. Гайд по миграции можно найти здесь.

Другие обновления

Оставшиеся обновления можно поделить на два типа:

  • Делают код чище. К этой категории относятся явное восьмеричное числовое обозначение, тип возвращаемого значения never, callback-функции как объекты первого типа, расширенная инициализация объектов и пересечение типов.
  • Дают больше контроля в коде. Здесь речь идет о финальных константах класса.

Отдельно стоит отметить прирост производительности в новой версии: на 23% для демо-приложения на фреймворке Symfony и на 3,5% для WordPress по сравнению с PHP 8. Важно понимать, что производительность часто индивидуальна и зависит от конкретного приложения.

Никогда не останавливайтесь: В программировании говорят, что нужно постоянно учиться даже для того, чтобы просто находиться на месте. Развивайтесь с нами — на Хекслете есть сотни курсов по разработке на разных языках и технологиях

Аватар пользователя Oleg Sabitov
Oleg Sabitov 30 ноября 2021
7
Рекомендуемые программы
профессия
Осваивайте разработку веб-страниц, оживляйте дизайн макетов, публикуйте сайты и приложения. Отслеживайте ошибки в интерфейсе и устраняйте их
10 месяцев
с нуля
Старт 28 ноября
профессия
Обучитесь разработке бэкенда сайтов и веб-приложений — серверной части, которая отвечает за логику и базы данных
10 месяцев
с нуля
Старт 28 ноября
профессия
Выполняйте ручное тестирование веб-приложений, находите ошибки в продукте. Узнайте все о тест-дизайне.
4 месяца
с нуля
Старт 28 ноября
профессия
Научитесь разработке веб-приложений, сайтов и программного обеспечения на языке Java, программируйте и используйте структуры данных
10 месяцев
с нуля
Старт 28 ноября
профессия
новый
Собирайте, анализируйте и интерпретируйте данные, улучшайте бизнес-процессы и продукт компании. Обучитесь работе с библиотеками Python
9 месяцев
с нуля
Старт 28 ноября
профессия
Занимайтесь созданием сайтов, веб-приложений, сервисов и их интеграцией с внутренними бизнес-системами на бекенд-языке PHP
10 месяцев
с нуля
Старт 28 ноября
профессия
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 28 ноября
профессия
Обучитесь разработке визуальной части сайта — фронтенда, а также реализации серверной — бэкенда. Освойте HTML, CSS, JavaScript
16 месяцев
с нуля
Старт 28 ноября
профессия
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 28 ноября
профессия
новый
Организовывайте процесс автоматизации тестирования на проекте, обучитесь языку программирования JavaScript, начните управлять процессом тестирования
8 месяцев
c опытом
Старт 28 ноября