我們都知道PHP腳本的執行過程,先是由Zend引擎將PHP原始碼編譯成opcode序列,再由Zend VM去解釋執行。一般編譯的過程都是先進行詞法分析、文法分析,然後才編譯。在經過語法分析之後,有一個抽象語法樹(AbstractSyntax Tree或縮寫為AST)的概念,他算是語法分析的產出,之後的編譯過程是編譯器在AST基礎上進行的。
但是PHP比較特殊,Zend引擎在文法分析後直接產出了opcode,沒有產生AST。這樣做最大的好處是加快了編譯過程,壞處則是失去了一些自由性,難以最佳化以及導致編譯程式邏輯複雜。具體PHP官網上有一篇wiki探討了在PHP的編譯過程中引入AST,當然實現起來難度肯定很大。
我們在平時一般不會接觸到PHP的編譯過程,但是AST卻是個有用的東西,我們平時工作中很多工具裡面都有AST,比如PHP_CodeSniffer、PHP_Depend、ZendStudio、PDT,需要對源碼進行分析的場合,或多或少都需要AST的幫忙。
下面我們看下PHP7和php5編譯流程,如圖
以上就介紹了php 解析流程,包含了面向的內容,希望對PHP教學有興趣的朋友有幫助。