OPCODE的功能列表
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
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函数 /
标签:
本文链接:http://78moban.cn/post/9314.html
版权声明:站内所有文章皆来自网络转载,只供模板演示使用,并无任何其它意义!