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);


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