PHP内核之opcode 变量哪里去了

首先我们需要知道一个东东:操作数,每个操作数有一下两部分组成


IS_TMP_VAR: 一个临时变量,保存一些op_array的结果,以便接下来的op_array使用,这种的操作数的 u 保存着一个指向变量表的一个句柄(整数),这种操作数一般用 "~" 开头,比如~0,  表示变量表的0号未知的临时变量

IS_VAR 这种是我们一般意义上的变量了,以$开头表示

IS_CV 表示ZE2.1/PHP5.1以后的编译器使用的一种cache机制,这种变量保存着被它引用的变量的地址,当一个变量第一次被引用的时候,就会被CV起来,以后对这个变量的引用就不需要再次去查找active符号表了,CV变量以!开头表示。

概念普及完毕,接下来我们举个例子说明:

第一个例子是没有变量的情况


可以看到红色标记处:compiled vars : none 没有变量



第二个例子是有变量的情况


可以看到红色标记处:compiled vars : !0 = $str 


这个CV变量 !0就是 php脚本中的变量$str了


再看一个例子 多变量的示例:


可以看到红色标记处:compiled vars : !0 = $str, !1 = $str1, !2 = $str2 


这个例子中不但有CV变量, 还有 TMP_VAR临时变量(~3, ~4);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章