我试图了解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
这很容易理解:它使用参数5和10调用函数“ test”,将结果放入临时变量〜0,然后使用该变量调用echo。
我的问题:“测试”在哪里编译?它的操作码在哪里?