PHP7の基礎となる操作機構で

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は、次のとおりです。SA​​PI、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(スレッドセーフなリソースマネージャ) -スレッドセーフなリソースマネージャは、リソースの共有は、安全性を確保するために使用されます。

おすすめ

転載: www.cnblogs.com/gupiao777/p/11622487.html