我们在分析opcode对应的handler的时候,往往会根据opcode的命名规则来推断具体的handler。然而,如果我们使用PHP8的话,我们可以利用jit的debug功能来快速的看到opcode对应的handler。我举个例子:
有如下代码:
1 | $a = [1, 2, 3]; |
像这个$a[2]对应的handler还是非常的长的,我们很难一口气推断出来。我们只需要配置一下php.ini就可以方便的拿到handler:
1 | zend_extension=opcache.so |
执行结果如下:
1 | JIT$/Users/hantaohuang/codeDir/cCode/php-src/test.php: ; (/Users/hantaohuang/codeDir/cCode/php-src/test.php) |
可以看到,handler是ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER。