首先我們需要知道一個東東:操作數,每個操作數有一下兩部分組成
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);