字面量存儲(chǔ):PHP代碼中定義的一些變量初始值、調(diào)用的函數(shù)名稱、類名稱、常量名稱等等稱之為字面量,這些值用于執(zhí)行時(shí)初始化變量、函數(shù)調(diào)用等等
變量分配情況:與字面量類似,這里指的是當(dāng)前opcodes定義了多少變量、臨時(shí)變量,每個(gè)變量都有一個(gè)對(duì)應(yīng)的編號(hào),執(zhí)行初始化按照總的數(shù)目一次性分配zval,使用時(shí)也完全按照編號(hào)索引,而不是根據(jù)變量名索引
從PHP代碼到opcode是怎么實(shí)現(xiàn)的?
最容易想到的方式就是正則匹配,當(dāng)然過(guò)程沒(méi)有這么簡(jiǎn)單。PHP編譯過(guò)程包括詞法分析、語(yǔ)法分析,使用re2c、bison完成,舊的PHP版本直接生成了opcode,PHP7新增了抽象語(yǔ)法樹(shù)(AST),在語(yǔ)法分析階段生成AST,然后再生成opcode數(shù)組