PHPは、それが最初の実行は、中間コードにコンパイルする必要があり、その後、特定の命令に翻訳特定の仮想マシンを介して実行され、解釈された言語です。次のようにその実装方法は次のとおりです。
PHP 代码 => Token => 抽象语法树 => Opcodes => 执行
各ステップは次のとおりです。
-
トークン解析して得られた語彙ソースコード
トークンは、PHPコードの意味の同一性を切断します。PHP7トークンの137種類の合計は、ファイルに定義されzend_language_parser.hを行います。 -
トークンベースのパーサーは、抽象構文木(AST)に変換され
、ワードトークンがブロックの一つであり、全体ではなく単語の意味の単独のブロック表現するだけでなく、一定のルールにより直列に整理することができます。だから我々は、トークン、シリーズのトークンに応じて、構文パーサと一致する必要があります。パーサ完成品シリーズは、トークン、抽象構文木(AST、抽象構文木)です。
PHPコードの以前のバージョンの実行は、このステップのAST生成されていない時にASTは、バージョンPHP7の新機能です。その主な機能は、PHPコンパイラやインタプリタ、改善された保守のデカップリングを達成することです。 -
オペコードに構文木を変換すると、
オペコードに構文木を変換する必要があり、それが直接エンジンを実行することができます。 -
オペコードを実行
オペコードとするフォームセットのオペコードであり、PHPは、中間コードの実行です。PHPプロジェクトの最適化対策は、比較的一般的な「オープンopcache」がある、オペコードがキャッシュされた技術を指します。オペコードステージエンジンにソースから排除することによって直接的に性能を向上させるために、良好なopacodeをキャッシュ行います。
-
Zendのエンジン
語彙/文法的分析、ASTコンパイルおよび実行オペコードはZendのエンジンに実装されています。また、PHPの変数の設計、メモリ管理は、プロセス管理エンジン層も達成されます。 -
PHP層
PHP用のZendエンジンは、基本的な機能を提供し、外部からの相互作用は、あなたは、PHPの層によって処理される必要があります。 -
SAPI
シーンやCLI SAPIのFPMのSAPIが含まれている略語サーバAPI、。限り定義されたSAPIプロトコルへの準拠など、外部モジュールは、PHPと対話完了することができます。 -
拡張機能
のZend Engineが提供するコア機能とインタフェースの仕様に基づいて、拡張機能を開発することができます。
PHP 7ソース構造
メインソースPHPのディレクトリ7は、次のとおりです。SAPI、Zendの、メイン、内線およびTSRMこれら。
SAPIディレクトリ
SAPIディレクトリには、抽象的、入力および出力層は、外部サービス仕様のPHPの提供です。
いくつかの一般的に使用されるSAPI:
1)apache2handler:Apacheの拡張DLLコンパイルを生成するために、Apacheのように構成される。アパッチの場合はhttpリクエスト、設定はPHPとの相互作用を完了するために、PHPのコードを実行するために、このダイナミックリンクライブラリを呼び出します。
2)CGI-FCGI:CGIプロセスにCGI要求を介してコンパイルされた実行可能支持CGIプロトコル、ウェブサーバ(例えば、nginxの)プロトコルを生成し、CGIプロセスは、適切なコードの実行結果を要求に応じてウェブサーバに戻され実行されます。
3)FPM-FCGI:FPMは、FastCGIプロセスマネージャです。nginxのサーバでは、例えば、要求は、要求処理プロセスPHP-FPMに従ってNginxは、nginxのFastCGIのプロトコルサーバに送信されたとき。
4)CLI:PHPコマンドラインインタラクティブインタフェース
-
Zendのディレクトリ
ZendのPHPのディレクトリは、コアコードです。PHPのメモリ管理、ガベージコレクション、プロセス管理、変数、配列などは、ソースディレクトリの中で実現しています。 -
メインディレクトリ
のメインディレクトリは、SAPI層と接着剤層のZendです。Zendの層は、SAPI層が抽象的入力および出力を実装して、PHPスクリプトのコンパイルと実行を実装し、メインディレクトリはその後、それらの間の接続な役割を果たしています。デッキ、SAPI要求解決、解析パラメータとスクリプト・ファイルを実行する、次のスタート、必要な作業を完了するためにはZendエンジン、初期化モジュールを呼び出す前に。 -
extディレクトリの
内線PHP拡張モジュールは、関連するディレクトリ、共通配列、STR、PDOおよび他の機能がここで定義されています。 -
TSRM
TSRM(スレッドセーフなリソースマネージャ) -スレッドセーフなリソースマネージャは、リソースの共有は、安全性を確保するために使用されます。