Я пытаюсь понять, как PHP работает внутри. Я написал расширение Zend и удалил «zend_compile_file», затем сбросил возвращенный zend_op_array *. Я думаю, что понимаю большую часть происходящего, но пока не понимаю, где в этой структуре будут находиться коды операций скомпилированной функции. Скажем, например, что я компилирую этот файл:
<?php
function test($a, $b) {
return $a + $b;
}
echo test(5, 10);
?>
Тогда сброшенные коды выглядят так:
opcode op1 op2 return
------------------------------------------------
ZEND_INIT_FCALL UNUSED "test" UNUSED
ZEND_SEND_VAL 5 UNUSED UNUSED
ZEND_SEND_VAL 10 UNUSED UNUSED
ZEND_DO_UCALL UNUSED UNUSED ~0
ZEND_ECHO ~0 UNUSED UNUSED
ZEND_RETURN 1 UNUSED UNUSED
Это довольно просто понять: она вызывает функцию «test» с параметрами 5 и 10, помещает результаты во временную переменную ~ 0 и затем вызывает echo с этой переменной.
Мой вопрос: где компилируется тест? Где его коды операций?
Задача ещё не решена.
Других решений пока нет …