Opcode = PHP 腳本編譯後的中間語言,類比 Java ByteCode / .NET MSIL。Zend VM 直接解釋執行。
token_get_all() 將源碼切分為 Token (ID + 內容)op_array,每條含 opcode編號、結果、操作數1、操作數2、擴展值$tokens = token_get_all('<?php echo "Hello World"; $a = 1 + 1; echo $a; ?>');
print_r($tokens);
/* 輸出片段:
[2] => [T_ECHO, 'echo']
[4] => [T_CONSTANT_ENCAPSED_STRING, '"Hello World"']
[7] => [T_VARIABLE, '$a']
[9] => '='
[11] => [T_LNUMBER, '1']
[13] => '+'
[15] => [T_LNUMBER, '1']
[18] => [T_ECHO, 'echo']
[20] => [T_VARIABLE, '$a']
*/
php -dvld.active=1 test.php # 輸出: # line 2: ECHO 'Hello World' # line 3: ADD ~0 1, 1 # line 3: ASSIGN !0, ~0 # line 4: ECHO !0 # line 6: RETURN 1 # compiled vars: !0 = $a
| 類型 | 前綴 | 含義 |
|---|---|---|
| IS_CONST | - | 常量值直接內嵌 |
| IS_TMP_VAR | ~ | 臨時變量,存中間結果 (如 ~0) |
| IS_VAR | $ | 普通變量 (動態查找符號表) |
| IS_CV | ! | 編譯期變量緩存 (PHP 5.1+,如 !0=$a) |
| IS_UNUSED | - | 無操作數 |