php是解析型高級語言,對于zend引擎來說,php就是一個普通的C程序。也是通過C語言main執(zhí)行,如何將PHP的程序解析為zend可執(zhí)行的的C代碼,就是zend的php編譯過程。
簡單來說,zend對PHP的程序代碼的編譯分三步
1,通過代碼詞法分析(re2c)和語義分析(Bison) 將php代碼編輯為抽象語法樹(AST)
2, 將抽象語法樹 編譯為 opcode數(shù)組 (zend_op_array)
- opcode其實就是zend定義的一個C的的結(jié)構(gòu)性(struct) opcode中定義 變量的類型 存儲和對應(yīng)語句 執(zhí)行方式 結(jié)果等
- pass_two 編譯階段很關(guān)鍵的一個操作就是確定了各個 變量、中間值、臨時值、返回值、字面量 的 內(nèi)存編號 ,