Какой скриптовый движок используется в PHP?

В PHP основным скриптовым движком является Zend Engine. Это низкоуровневая программная платформа, разработанная на языке C, которая отвечает за интерпретацию, выполнение и управление жизненным циклом кода PHP. Zend Engine служит ядром самого PHP и фактически реализует его семантику и поведение, аналогично тому, как V8 — движок для JavaScript в Chrome.

История Zend Engine

Zend Engine была разработана двумя израильскими программистами — Зеевом Сураски (Zeev Suraski) и Андии Гутмансом (Andi Gutmans) в 1999 году. Они также являются основателями компании Zend Technologies. Название "Zend" — это сочетание их имён: Zeev + Andi.

Первая реализация — Zend Engine 1.0 — была представлена как основа для PHP 4. С тех пор движок развивался параллельно с развитием самого языка PHP.

Основные версии Zend Engine

Zend Engine 1 (PHP 4)

  • Появилась в 2000 году с выходом PHP 4.

  • Улучшила производительность по сравнению с предыдущей версией PHP 3.

  • Поддерживала базовую модель объектов, но без полной ООП-системы.

Zend Engine 2 (PHP 5)

  • Введена в 2004 году.

  • Основное нововведение — полноценная поддержка объектно-ориентированного программирования (ООП): классы, интерфейсы, инкапсуляция, наследование и пр.

  • Поддержка исключений (try/catch).

  • Рефлексия, перегрузка методов, магические методы (__get, __set, и др.).

Zend Engine 3 (PHP 7)

  • Появилась с выходом PHP 7 в 2015 году.

  • Существенно переработана структура хранения переменных: новый формат zval, упрощённый Garbage Collector.

  • Прирост производительности в 2–3 раза по сравнению с PHP 5.6.

  • Улучшенное управление памятью.

  • Типизация аргументов, возвращаемых значений.

Zend Engine 4 (PHP 8)

  • Неофициально можно называть "Zend Engine 4", но такого названия официально нет — движок всё ещё называется Zend Engine 3.x.

  • С выходом PHP 8 добавлены:

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

    • улучшения в синтаксисе и безопасности;

    • атрибуты (аннотации);

    • именованные аргументы;

    • улучшения в типах и исключениях;

    • улучшения JIT-инфраструктуры в PHP 8.1–8.3.

Как работает Zend Engine

  1. Парсинг
    PHP-файл сначала разбирается с помощью лексера и парсера, создающих абстрактное синтаксическое дерево (AST).

  2. Компиляция в байт-код (opcode)
    AST компилируется в так называемые опкоды — низкоуровневые инструкции, понятные Zend Engine.

  3. Исполнение байт-кода
    Эти опкоды затем исполняются интерпретатором Zend Engine.

  4. Управление памятью
    Zend управляет всеми переменными, их копированием (copy-on-write), ссылками и освобождением памяти через встроенный garbage collector (начиная с PHP 5.3 — циклический сборщик мусора).

  5. JIT (PHP 8+)
    В PHP 8 добавлен Just-In-Time компилятор, встроенный в Zend Engine. Он может компилировать горячие участки кода (например, численные расчёты) в машинный код на лету, ускоряя их выполнение.

Компоненты Zend Engine

  • Zend Compiler — анализирует исходный PHP-код и преобразует его в опкоды.

  • Zend Executor — исполняет опкоды, управляет контекстом выполнения.

  • ZVAL — структура, которая описывает переменные в памяти.

  • Zend Memory Manager — управляет памятью во время исполнения.

  • Garbage Collector — определяет и освобождает неиспользуемую память (начиная с PHP 5.3).

  • Opcode Cache — например, с помощью OPcache (расширение), можно кэшировать опкоды, избегая повторной компиляции при каждом запросе.

Расширения к Zend Engine

Zend Engine поддерживает различные расширения, в том числе:

  • OPcache — кэширует байткод в памяти для ускорения загрузки и исполнения.

  • Xdebug — расширение для отладки, профилирования и трассировки.

  • APCu — пользовательский кэш.

  • Zend Guard (устаревший) — коммерческое решение для защиты исходного кода PHP от просмотра.

Альтернативные интерпретаторы PHP

Хотя Zend Engine является основным скриптовым движком PHP, существуют и альтернативные реализации:

  1. HHVM (HipHop Virtual Machine) от Facebook:

    • Разрабатывался как высокопроизводительная альтернатива Zend Engine.

    • Использовал JIT-компиляцию ещё до PHP 8.

    • Позже ушёл в сторону языка Hack и потерял совместимость с основным PHP.

  2. Phalanger / PeachPie:

    • Компилируют PHP в .NET-байткод (CIL) и исполняются на платформе .NET/Mono.

    • PeachPie — современная реинкарнация, активно развивается, поддерживает .NET 6+.

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

Zend Engine — это сердце PHP, обеспечивающее его интерпретацию, компиляцию, выполнение и управление памятью. Без него невозможно представить экосистему PHP, так как все функции языка, от переменных и классов до исключений и JIT-компиляции, реализованы именно в этом движке.