您的位置:首页 > 编程语言 > PHP开发

PHP内核之opcode 变量哪里去了

2016-08-26 10:03 239 查看
首先我们需要知道一个东东:操作数,每个操作数有一下两部分组成



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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opcode