附录B Token与opcode含义对应表

570 阅读6分钟

1. Token

Token含义对应表如表B-1所示。

表B-1 Token含义对应表

Token标识符 Code 含义
END 0
T_REQUIRE_ONCE 258 require_once
T_REQUIRE 259 require
T_EVAL 260 eval
T_INCLUDE_ONCE 261 include_once
T_INCLUDE 262 include
T_LOGICAL_OR 263 or
T_LOGICAL_XOR 264 xor
T_LOGICAL_AND 265 and
T_PRINT 266 print
T_YIELD 267 yield
T_DOUBLE_ARROW 268 =>
T_YIELD_FROM 269 yield from
T_POW_EQUAL 270 **=
T_SR_EQUAL 271 >>=
T_SL_EQUAL 272 <<=
T_XOR_EQUAL 273 ^=
T_OR_EQUAL 274 !=
T_AND_EQUAL 275 &=
T_MOD_EQUAL 276 %=
T_CONCAT_EQUAL 277 .=
T_DIV_EQUAL 278 /=
T_MUL_EQUAL 279 *=
T_MINUS_EQUAL 280 _=
T_PLUS_EQUAL 281 +=
T_COALESCE 282 ??
T_BOOLEAN_OR 283
T_BOOLEAN_AND 284 &&
T_SPACESHIP 285 <=>
T_IS_NOT_IDENTICAL 286 !==
T_IS_IDENTICAL 287 ===
T_IS_NOT_EQUAL 288 != 或 <>
T_IS_EQUAL 289 ==
T_IS_GREATER_OR_EQUAL 290 >=
T_IS_SMALLER_OR_EQUAL 291 <=
T_SR 292 >>
T_SL 293 <<
T_INSTANCEOF 294 instanceof
T_UNSET_CAST 295 (unset)
T_BOOL_CAST 296 (bool)
T_OBJECT_CAST 297 (object)
T_ARRAY_CAST 298 (array)
T_STRING_CAST 299 (string)
T_DOUBLE_CAST 300 (double)
T_INT_CAST 301 (int)
T_DEC 302 --
T_INC 303 ++
T_POW 304 **
T_CLONE 305 clone
T_NEW 306 new
T_NOELSE 307
T_ELSEIF 308 elseif
T_ELSE 309 else
T_ENDIF 310 endif
T_PUBLIC 311 public
T_PROTECTED 312 protected
T_PRIVATE 313 private
T_FINAL 314 final
T_ABSTRACT 315 abstract class
T_STATIC 316 static
T_LNUMBER 317 整型
T_DNUMBER 318 浮点型
T_STRING 319 字符串
T_VARIABLE 320 变量$xx
T_INLINE_HTML 321 html字符串
T_ENCAPSED_AND_WHITESPACE 322 双引号包裹的含有变量的字符串
T_CONSTANT_ENCAPSED_STRING 323 引号包裹的字符串
T_STRING_VARNAME 324 花括号语法${
T_NUM_STRING 325 字符串中的数字数组索引
T_EXIT 326 exit
T_IF 327 if
T_ECHO 328 echo
T_DO 329 do
T_WHILE 330 while
T_ENDWHILE 331 endwhile
T_FOR 332 for
T_ENDFOR 333 endfor
T_FOREACH 334 foreach
T_ENDFOREACH 335 endforeach
T_DECLARE 336 declare
T_ENDDECLARE 337 enddeclare
T_AS 338 as
T_SWITCH 339 switch
T_ENDSWITCH 340 endswitch
T_CASE 341 case
T_DEFAULT 342 default
T_BREAK 343 break
T_CONTINUE 344 continue
T_GOTO 345 goto
T_FUNCTION 346 function
T_CONST 347 const
T_RETURN 348 return
T_TRY 349 try
T_CATCH 350 catch
T_FINALLY 351 finally
T_THROW 352 throw
T_USE 353 use
T_INSTEADOF 354 insteadof
T_GLOBAL 355 global
T_VAR 356 var
T_UNSET 357 unset
T_ISSET 358 isset
T_EMPTY 359 empty
T_HALT_COMPILER 360 _halt_compiler
T_CLASS 361 class
T_TRAIT 362 trait
T_INTERFACE 363 interface
T_EXTENDS 364 extends
T_IMPLEMENTS 365 impleements
T_OBJECT_OPERATOR 366 ->
T_LIST 367 list
T_ARRAY 368 array
T_CALLABLE 369 callable
T_LINE 370 LINE
T_FILE 371 FILE
T_DIR 372 DIR
T_CLASS_C 373 CLASS
T_TRAIT_C 374 TRAIT
T_METHOD_C 375 METHOD
T_FUNC_C 376 FUNCTION
T_COMMENT 377 // 或 #风格的注释
T_DOC_COMMENT 378 /** **/风格的doccomment
T_OPEN_TAG 379 <?php
T_OPEN_TAG_WITH_ECHO 380 <?=
T_CLOSE_TAG 381 ?>
T_WHITESPACE 382 \t
T_START_HEREDOC 383 heredoc结构的字符串开始
T_END_HEREDOC 384 heredoc结构的字符串结尾
T_DOLLAR_OPEN_CURLY_BRACES 385 ${
T_CURLY_OPEN 386 {$
T_PAAMAYIM_NEKUDOTAYIM 387 ::
T_NAMESPACE 388 namespace
T_NS_C 389 NAMESPACE
T_NS_SEPARATOR 390 命名空间分隔符\
T_ELLIPSIS 391 可变参数...
T_ERROR 392 语法错误

2. opcode

opcode含义对应表如表B-2所示。

表B-2 opcode含义对应表

opcode Code 含义
ZEND_NOP 0 空操作,空函数或者其他无用操作会优化成这个
ZEND_ADD 1 1+1
ZEND_SUB 2 1-1
ZEND_MUL 3 1*1
ZEND_DIV 4 1/1
ZEND_MOD 5 取模 1%1
ZEND_SL 6 位左移 1<<1
ZEND_SR 7 位右移 1>>1
ZEND_CONCAT 8 连接字符串 1.1
ZEND_BW_OR 9 按位或 1|1
ZEND_BW_AND 10 按位与 1&1
ZEND_BW_XOR 11 按位异或 1^1
ZEND_BW_NOT 12 按位取反 ~1
ZEND_BOOL_NOT 13 逻辑非 !1
ZEND_BOOL_XOR 14 逻辑异或 1xor0
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 类型转换 $a=(int)'1';
ZEND_QM_ASSIGN 22 三元运算 $a=1?2:3;
ZEND_ASSIGN_ADD 23 加等于 $a+=1;
ZEND_ASSIGN_SUB 24 减等于 $a-=1;
ZEND_ASSIGN_MUL 25 乘等于 $a*=1;
ZEND_ASSIGN_DIV 26 除等于 $a/=1;
ZEND_ASSIGN_MOD 27 取模等于 $a%=1;
ZEND_ASSIGN_SL 28 位左移等于 $a<<=1;
ZEND_ASSIGN_SR 29 位右移等于 $a>>=1;
ZEND_ASSIGN_CONCAT 30 连接等于 $a.=1;
ZEND_ASSIGN_BW_OR 31 按位或等于 $a|=1;
ZEND_ASSIGN_BW_AND 32 按位与等于 $a&=1;
ZEND_ASSIGN_BW_XOR 33 按位异或 $a^=1;
ZEND_PRE_INC 34 前自增 ++$a;
ZEND_PRE_DEC 35 前自减 --$a;
ZEND_POST_INC 36 后自增 $a++;
ZEND_POST_DEC 37 后自减 $a--;
ZEND_ASSIGN 38 赋值 $a=1;
ZEND_ASSIGN_REF 39 引用赋值 $a=&$b;
ZEND_ECHO 40 echo
ZEND_GENERATOR_CREATE 41 generator函数声明
ZEND_JMP 42 无条件跳转
ZEND_JMPZ 43 如果为零的条件跳转
ZEND_JMPNZ 44 如果不为零的条件跳转
ZEND_JMPZNZ 45
ZEND_JMPZ_EX 46
ZEND_JMPNZ_EX 47
ZEND_CASE 48
ZEND_CHECK_VAR 49
ZEND_SEND_VAR_NO_REF_EX 50
ZEND_MAKE_REF 51
ZEND_BOOL 52 bool转换
ZEND_FAST_CONCAT 53
ZEND_ROPE_INIT 54
ZEND_ROPE_ADD 55
ZEND_ROPE_END 56
ZEND_BEGIN_SILENCE 57 错误屏蔽开始
ZEND_END_SILENCE 58 错误屏蔽结束
ZEND_INIT_FCALL_BY_NAME 59 通过包含函数名称的变量来调用函数
ZEND_DO_FCALL 60 函数调用
ZEND_INIT_FCALL 61
ZEND_RETURN 62 函数返回
ZEND_RECV 63 接受参数
ZEND_RECV_INIT 64 接受默认参数
ZEND_SEND_VAL 65 调用函数时传递值
ZEND_SEND_VAR_EX 66
ZEND_SEND_REF 67 用于在编译期间已知为引用的参数
ZEND_NEW 68 new class
ZEND_INIT_NS_FCALL_BY_NAME 69 命名空间函数调用
ZEND_FREE 70 释放空间
ZEND_INIT_ARRAY 71 数组初始化
ZEND_ADD_ARRAY_ELEMENT 72 数组添加元素
ZEND_INCLUDE_OR_EVAL 73 include、require、eval
ZEND_UNSET_VAR 74 销毁对象
ZEND_UNSET_DIM 75 销毁数组中的某一个变量
ZEND_UNEST_OBJ 76 销毁对象
ZEND_FE_RESET_R 77
ZEND_FE_FETCH_R 78
ZEND_EXIT 79 退出程序
ZEND_FETCH_R 80 获取变量地址、只读
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 检测变量是否设置,常见于isset和empty
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
ZEND_FETCH_DIM_UNSET 96
ZEND_FETCH_OBJ_UNSET 97
ZEND_FETCH_LIST 98
ZEND_FETCH_CONSTANT 99
ZEND_EXT_STMT 101
ZEND_EXT_FCALL_BEGIN 102
ZEND_EXT_FCALL_END 103
ZEND_EXT_NOP 104
ZEND_TICKS 105 时钟周期相关
ZEND_SEND_VAR_NO_REF 106
ZEND_CATCH 107 异常捕获
ZEND_THROW 108 抛出异常
ZEND_FETCH_CLASS 109 使用对象名称获取对象指针
ZEND_CLONE 110 对象克隆
ZEND_RETURN_BY_REF 111 返回值为引用
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_SEND_VAL_EXT 116
ZEND_SEND_VAR 117 调用函数时传递变量
ZEND_INIT_USER_CALL 118 call_user_function函数
ZEND_SEND_ARRAY 119
ZEND_SEND_USER 120
ZEND_STRLEN 121 strlen函数
ZEND_DEFINED 122 defined函数,检查非命名空间的常量是否存在
ZEND_TYPE_CHECK 123 检测变量类型系列函数
ZEND_VERIFY_RETURN_TYPE 124 返回值类型检查
ZEND_FE_RESET_RW 125
ZEND_FE_FETCH_RW 126
ZEND_FE_FREE 127
ZEND_INIT_DYNAMIC_CALL 128 初始化动态函数create_function
ZEND_DO_ICALL 129
ZEND_DO_UCALL 130
ZEND_DO_FCALL_BY_NAME 131 通过名称调用函数
ZEND_PRE_INC_OBJ 132 对象属性前自增
ZEND_PRE_DEC_OBJ 133 对象属性前自减
ZEND_POST_INC_OBJ 134 对象属性后自增
ZEND_POST_DEC_OBJ 135 对象属性后自减
ZEND_ASSIGN_OBJ 136 对象赋值
ZEND_OP_DATA 137
ZEND_INSTANCEOF 138 Instanceof操作符
ZEND_DECLARE_CLASS 139 类声明
ZEND_DECLARE_INHERITED_CLASS 140 继承类声明
ZEND_DECLARE_FUNCTION 141 函数声明
ZEND_YIELD_FROM 142 yield from语法,generator中调用generator
ZEND_DECLARE_CONST 143 类常量声明
ZEND_ADD_INTERFACE 144 类声明时添加接口
ZEND_DECLARE_INHERITED_CLASS_DELAYED 145 声明继承类,使用delayedearlybinding
ZEND_VERIFY_ABSTRACT_CLASS 146 实现接口后的验证
ZEND_ASSIGN_DIM 147 数组元素赋值
ZEND_ISSET_ISEMPTY_PROP_OBJ 148 对象属性is测试
ZEND_HANDLE_EXCEPTION 149
ZEND_USER_OPCODE 150
ZEND_ASSERT_CHECK 151
ZEND_JMP_SET 152 ?: 语法,注意是省略了中间部分的三元运算符,完整的三元运算符其opcode不是这个
ZEND_DECLARE_LAMBDA_FUNCTION 153 匿名函数声明
ZEND_ADD_TRAIT 154
ZEND_BIND_TRAITS 155
ZEND_SEPARATE 156
ZEND_FETCH_CLASS_NAME 157
ZEND_CALL_TRAMPOLINE 158
ZEND_DISCARD_EXCEPTION 159
ZEND_YIELD 160 yield关键字
ZEND_GENERATOR_RETURN 161 generator函数返回
ZEND_FAST_CALL 162
ZEND_FAST_RET 163
ZEND_RECV_VARIADIC 164
ZEND_SEND_UNPACK 165
ZEND_POW 166 **
ZEND_ASSIGN_POW 167 **=
ZEND_BIND_GLOBAL 168
ZEND_COALESCE 169 null合并操作符??
ZEND_SPACESHIP 170 太空船操作符<=>
ZEND_DECLARE_ANON_CLASS 171
ZEND_DECLARE_ANON_INHERITED_CLASS 172
ZEND_FETCH_STATIC_PROP_R 173
ZEND_FETCH_STATIC_PROP_W 174
ZEND_FETCH_STATIC_PROP_RW 175
ZEND_FETCH_STATIC_PROP_IS 176
ZEND_FETCH_STATIC_PROP_FUNC_ARG 177
ZEND_FETCH_STATIC_PROP_UNSET 178
ZEND_UNSET_STATIC_PROP 179
ZEND_ISSET_ISEMPTY_STATIC_PROP 180
ZEND_FETCH_CLASS_CONSTANT 181
ZEND_BIND_LEXICAL 182
ZEND_BIND_STATIC 183
ZEND_FETCH_THIS 184
ZEND_ISSET_ISEMPTY_THIS 185 对象中this变量is测试
ZEND_VM_LAST_OPCODE 186