Opcode代码 |
值 |
ver |
含义 |
ZEND_NOP |
0 |
|
空操作 |
ZEND_ADD |
1 |
|
加 |
ZEND_SUB |
2 |
|
减 |
ZEND_MUL |
3 |
|
乘 |
ZEND_DIV |
4 |
|
除 |
ZEND_MOD |
5 |
|
求模 |
ZEND_SL |
6 |
|
左移位 Shift Left |
ZEND_SR |
7 |
|
右移位 Shift Right |
ZEND_CONCAT |
8 |
|
字符串连接 |
ZEND_BW_OR |
9 |
|
按位或 |
ZEND_BW_AND |
10 |
|
按位与 |
ZEND_BW_XOR |
11 |
|
按位异或 |
ZEND_BW_NOT |
12 |
|
按位非 |
ZEND_BOOL_NOT |
13 |
|
逻辑非! |
ZEND_BOOL_XOR |
14 |
|
逻辑异或 XOR |
ZEND_IS_IDENTICAL |
15 |
|
=== |
ZEND_IS_NOT_IDENTICAL |
16 |
|
!== |
ZEND_IS_EQUAL |
17 |
|
== |
ZEND_IS_NOT_EQUAL |
18 |
|
<>,!= |
ZEND_IS_SMALLER |
19 |
|
< |
ZEND_IS_SMALLER_OR_EQUAL |
20 |
|
<= |
ZEND_CAST |
21 |
|
类型强制转换,目标类型extend_value |
ZEND_QM_ASSIGN |
22 |
|
?: 操作赋值 |
ZEND_ASSIGN_ADD |
23 |
|
+= |
ZEND_ASSIGN_SUB |
24 |
|
-= |
ZEND_ASSIGN_MUL |
25 |
|
*= |
ZEND_ASSIGN_DIV |
26 |
|
/= |
ZEND_ASSIGN_MOD |
27 |
|
%= |
ZEND_ASSIGN_SL |
28 |
|
<<= |
ZEND_ASSIGN_SR |
29 |
|
>>= |
ZEND_ASSIGN_CONCAT |
30 |
|
.= |
ZEND_ASSIGN_BW_OR |
31 |
|
|= |
ZEND_ASSIGN_BW_AND |
32 |
|
&= |
ZEND_ASSIGN_BW_XOR |
33 |
|
^= |
ZEND_PRE_INC |
34 |
|
++前自增 ++$a |
ZEND_PRE_DEC |
35 |
|
--前自减 --$a |
ZEND_POST_INC |
36 |
|
后自增++ $a ++ |
ZEND_POST_DEC |
37 |
|
后自减-- $a-- |
ZEND_ASSIGN |
38 |
|
赋值= |
ZEND_ASSIGN_REF |
39 |
|
引用赋值 =& |
ZEND_ECHO |
40 |
|
ECHO |
ZEND_PRINT |
41 |
|
PRINT |
ZEND_JMP |
42 |
|
无条件跳转指令 |
ZEND_JMPZ |
43 |
|
条件跳转 |
ZEND_JMPNZ |
44 |
|
ZEND_JMPZNZ |
45 |
|
ZEND_JMPZ_EX |
46 |
|
ZEND_JMPNZ_EX |
47 |
|
ZEND_CASE |
48 |
|
CASE操作符 |
ZEND_SWITCH_FREE |
49 |
|
SWITCH |
ZEND_BRK |
50 |
|
BREAK |
ZEND_CONT |
51 |
|
CONTINUE |
ZEND_BOOL |
52 |
|
BOOL转换 |
ZEND_INIT_STRING |
53 |
|
初始化字符串 |
ZEND_ADD_CHAR |
54 |
|
将字符加到字符串 |
ZEND_ADD_STRING |
55 |
|
将字符串加到字符串 |
ZEND_ADD_VAR |
56 |
|
将变量加到字符串 |
ZEND_BEGIN_SILENCE |
57 |
|
错误屏蔽开始 |
ZEND_END_SILENCE |
58 |
|
错误屏蔽结束 |
ZEND_INIT_FCALL_BY_NAME |
59 |
|
初始化通过名称调用函数 |
ZEND_DO_FCALL |
60 |
|
函数调用 |
ZEND_DO_FCALL_BY_NAME |
61 |
|
通过名称调用函数 |
ZEND_RETURN |
62 |
|
函数返回 |
ZEND_RECV |
63 |
|
函数声明时传递参数 |
ZEND_RECV_INIT |
64 |
|
函数声明时传递参数,用默认值初始化 |
ZEND_SEND_VAL |
65 |
|
函数调用时传递值作为参数 |
ZEND_SEND_VAR |
66 |
|
函数调用时传递变量作为参数 |
ZEND_SEND_REF |
67 |
|
函数调用时传递引用作为参数 |
ZEND_NEW |
68 |
|
new 操作 |
ZEND_INIT_NS_FCALL_BY_NAME |
69 |
5.3 |
命名空间函数调用 |
ZEND_FREE |
70 |
|
free操作 |
ZEND_INIT_ARRAY |
71 |
|
数组初始化 |
ZEND_ADD_ARRAY_ELEMENT |
72 |
|
添加数组元素 |
ZEND_INCLUDE_OR_EVAL |
73 |
|
include/require/eval操作 |
ZEND_UNSET_VAR |
74 |
5.1 |
UNSET操作 |
ZEND_UNSET_DIM |
75 |
5.1 |
ZEND_UNSET_OBJ |
76 |
5.1 |
ZEND_FE_RESET |
77 |
5.1 |
FOREACH操作 |
ZEND_FE_FETCH |
78 |
|
FOREACH操作 |
ZEND_EXIT |
79 |
|
EXIT |
ZEND_FETCH_R |
80 |
|
这一系列OPCODE用于获取各种类型的变量地址,分别用于不同的操作。R:只读,W:只写,RW:读写。DIM – 数组OBJ – 对象 |
ZEND_FETCH_DIM_R |
81 |
|
ZEND_FETCH_OBJ_R |
82 |
|
ZEND_FETCH_W |
83 |
|
ZEND_FETCH_DIM_W |
84 |
|
ZEND_FETCH_OBJ_W |
85 |
|
ZEND_FETCH_RW |
86 |
|
ZEND_FETCH_DIM_RW |
87 |
|
ZEND_FETCH_OBJ_RW |
88 |
|
ZEND_FETCH_IS |
89 |
|
取出变量地址,用于IS*测试。IS*测试指的是对变量进行ISSET 或ISEMPTY测试。 |
ZEND_FETCH_DIM_IS |
90 |
|
ZEND_FETCH_OBJ_IS |
91 |
|
ZEND_FETCH_FUNC_ARG |
92 |
|
获取函数参数地址 |
ZEND_FETCH_DIM_FUNC_ARG |
93 |
|
ZEND_FETCH_OBJ_FUNC_ARG |
94 |
|
ZEND_FETCH_UNSET |
95 |
|
获取变量地址,用于UNSET |
ZEND_FETCH_DIM_UNSET |
96 |
|
ZEND_FETCH_OBJ_UNSET |
97 |
|
ZEND_FETCH_DIM_TMP_VAR |
98 |
|
|
ZEND_FETCH_CONSTANT |
99 |
5.0 |
取得常量地址 |
ZEND_GOTO |
100 |
5.3 |
GOTO 操作 |
ZEND_EXT_STMT |
101 |
|
extension statement |
ZEND_EXT_FCALL_BEGIN |
102 |
|
extension function call begin |
ZEND_EXT_FCALL_END |
103 |
|
extension function call end |
ZEND_EXT_NOP |
104 |
|
extension noop |
ZEND_TICKS |
105 |
|
TICKS函数,5.3中过时,6.0取消 |
ZEND_SEND_VAR_NO_REF |
106 |
|
参数传递 |
ZEND_CATCH |
107 |
5.0 |
异常处理捕获异常 |
ZEND_THROW |
108 |
|
异常处理抛出异常 |
ZEND_FETCH_CLASS |
109 |
|
使用对象名称获取对象指针 |
ZEND_CLONE |
110 |
|
对象克隆 |
ZEND_INIT_METHOD_CALL |
112 |
|
对象方法调用初始化 |
ZEND_INIT_STATIC_METHOD_CALL |
113 |
|
对象静态方法调用初始化 |
ZEND_ISSET_ISEMPTY_VAR |
114 |
|
标量类型变量IS*测试 |
ZEND_ISSET_ISEMPTY_DIM_OBJ |
115 |
|
数组或对象类型变量IS*测试 |
ZEND_PRE_INC_OBJ |
132 |
|
对象属性前自增 ++$obj->prop |
ZEND_PRE_DEC_OBJ |
133 |
|
对象属性前自减 --$obj->prop |
ZEND_POST_INC_OBJ |
134 |
|
对象属性后自增 $obj->prop++ |
ZEND_POST_DEC_OBJ |
135 |
|
对象属性后自减 $obj->prop-- |
ZEND_ASSIGN_OBJ |
136 |
|
对象赋值 |
ZEND_INSTANCEOF |
138 |
|
instanceof操作符 |
ZEND_DECLARE_CLASS |
139 |
|
类声明 |
ZEND_DECLARE_INHERITED_CLASS |
140 |
|
继承类声明 |
ZEND_DECLARE_FUNCTION |
141 |
|
函数声明 |
ZEND_RAISE_ABSTRACT_ERROR |
142 |
|
实例化抽象类错误 |
ZEND_DECLARE_CONST |
143 |
5.3 |
常数声明 |
ZEND_ADD_INTERFACE |
144 |
|
类声明时添加接口 |
ZEND_DECLARE_INHERITED_CLASS_DELAYED |
145 |
|
声明继承类,使用delayed early binding |
ZEND_VERIFY_ABSTRACT_CLASS |
146 |
|
抽象类验证 |
ZEND_ASSIGN_DIM |
147 |
|
数组元素赋值 |
ZEND_ISSET_ISEMPTY_PROP_OBJ |
148 |
|
对象属性IS*测试 |
ZEND_HANDLE_EXCEPTION |
149 |
|
异常处理 |
ZEND_USER_OPCODE |
150 |
5.1 |
用户自定义OPCODE处理器 |
ZEND_U_NORMALIZE |
151 |
6.0 |
规范化标识符名 |
ZEND_JMP_SET |
152 |
5.3 |
无条件跳转,并设置RESULT |
ZEND_DECLARE_LAMBDA_FUNCTION |
153 |
5.3 |
声明LAMBDA函数 |