Открыть сервис

PHP 8

PHP 8 — это мажорная версия скриптового языка программирования общего назначения PHP, выпущенная 26 ноября 2020 года. Она представляет собой значительный шаг в развитии языка, внедрив ряд фундаментальных нововведений, включая JIT-компиляцию (Just-In-Time), атрибуты, именованные аргументы, улучшенную систему типов и множество синтаксических улучшений. PHP 8 разрабатывался как эволюционное обновление, направленное на повышение производительности, надёжности и удобства разработки, сохраняя при этом обратную совместимость с предыдущими версиями (в основном с PHP 7.x).

История и предпосылки

Разработка PHP 8 началась вскоре после выхода PHP 7.4 в ноябре 2019 года. Основной предпосылкой стало стремление команды разработчиков (PHP Internals) реализовать давно запланированные, но отложенные функции, такие как JIT-компиляция и атрибуты, а также исправить накопившиеся проблемы с дизайном языка. Процесс разработки проходил в открытом режиме с использованием RFC (Request for Comments) — официального механизма предложения и обсуждения изменений.

Ключевым этапом стало принятие RFC по JIT-компиляции, предложенного Дмитрием Стоговым, который работал над этой технологией в рамках проекта PHP. Выход первой альфа-версии состоялся в июне 2020 года, а финальный релиз — 26 ноября 2020 года. В отличие от PHP 7, который был сфокусирован на оптимизации производительности движка Zend Engine, PHP 8 сосредоточился на расширении возможностей языка и улучшении качества кода.

Основные нововведения

JIT-компиляция (Just-In-Time)

Самое значительное техническое нововведение PHP 8 — это JIT-компилятор. В предыдущих версиях PHP код сначала компилировался в байт-код (opcode), а затем выполнялся виртуальной машиной Zend VM. JIT-компилятор позволяет во время выполнения преобразовывать наиболее часто используемые участки байт-кода непосредственно в машинный код процессора, что значительно ускоряет выполнение вычислительно сложных задач.

JIT в PHP 8 реализован на основе библиотеки DynASM и может работать в двух режимах:

На практике JIT-компиляция даёт наибольший прирост производительности в синтетических тестах (бенчмарках) и вычислительных задачах (например, математические расчёты, обработка изображений). Для типичных веб-приложений, где узким местом часто является ввод-вывод (базы данных, файловая система), прирост производительности от JIT менее заметен — обычно от 5% до 15%.

Атрибуты (Attributes)

Атрибуты (также известные как аннотации) — это механизм добавления метаданных к классам, методам, свойствам, функциям и константам. В предыдущих версиях PHP для этой цели использовались doc-блоки (комментарии /** @var ... */), которые не были частью синтаксиса языка и обрабатывались сторонними библиотеками через рефлексию.

В PHP 8 атрибуты стали частью языка. Они объявляются с помощью синтаксиса #[...] и могут быть прочитаны через API Reflection. Это позволяет фреймворкам и библиотекам (например, Symfony, Doctrine) получать метаданные без парсинга комментариев, что делает код более надёжным и быстрым.

Пример: ```php

[Route('/api/users', methods: ['GET'])]

class UserController { ... } ```

Именованные аргументы (Named Arguments)

Именованные аргументы позволяют передавать значения в функцию, указывая имя параметра, а не его позицию в списке. Это решает проблему с функциями, имеющими много необязательных параметров, и улучшает читаемость кода.

Пример: ``php // Вместо htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false); // Можно писать htmlspecialchars($string, double_encode: false); ``

Улучшенная система типов

PHP 8 значительно расширил систему типов, что является частью долгосрочной стратегии по превращению PHP в язык со строгой типизацией по желанию разработчика.

Синтаксические улучшения

Классификация версий

PHP 8 имеет несколько минорных версий, каждая из которых добавляла новые функции и исправления:

Применение и значение

PHP 8 является текущей стабильной версией языка и широко используется в веб-разработке. Он поддерживается всеми основными фреймворками: Laravel, Symfony, Yii, CodeIgniter, WordPress (начиная с версии 5.6). Переход на PHP 8 рекомендуется для всех проектов, так как он обеспечивает более высокую производительность, улучшенную безопасность и современный синтаксис.

Нововведения PHP 8, такие как JIT-компиляция, делают его более конкурентоспособным в областях, где PHP традиционно уступал (например, в высоконагруженных вычислениях). Атрибуты и улучшенная система типов способствуют написанию более чистого, самодокументируемого и поддерживаемого кода. Внедрение именованных аргументов и match-выражения снижает количество ошибок, связанных с порядком параметров и неявным приведением типов.

Критика и ограничения

Несмотря на значительные улучшения, PHP 8 не лишён критики. Основные замечания касаются:

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →