PHP スクリプトの実行プロセスは誰もが知っています。まず、Zend エンジンが PHP ソース コードをオペコード シーケンスにコンパイルし、次に Zend VM がそれを解釈して実行します。一般的なコンパイル プロセスでは、まず字句解析と構文解析を実行してからコンパイルします。構文解析の後には、構文解析の出力である抽象構文ツリー (Abstract Syntax Tree、または AST) の概念があり、その後のコンパイル処理は AST に基づいてコンパイラによって実行されます。
しかし、PHP は特殊で、Zend エンジンは構文解析後に直接オペコードを生成し、AST を生成しません。これを行うことの最大の利点は、コンパイル プロセスが高速化されることですが、欠点は、自由度が失われ、最適化が困難になり、コンパイラ ロジックが複雑になることです。具体的には、PHP のコンパイル プロセスにおける AST の導入について説明する Wiki が PHP の公式 Web サイトにあります。もちろん、実装するのは非常に困難です。
私たちは普段 PHP のコンパイルプロセスに触れることはありませんが、日常業務では PHP_CodeSniffer、PHP_Depend、ZendStudio、PDT などの多くのツールに AST が含まれています。分析を実行するときは、多かれ少なかれ AST の助けが必要です。
図に示すように、PHP7 と php5 のコンパイル プロセスを見てみましょう
上記では、PHP の解析プロセスをさまざまな側面を含めて紹介していますが、PHP チュートリアルに興味のある友人に役立つことを願っています。