PHP 7コードの実行過程を知っていますか?

2461 ワード

PHPは解釈型言語であり,その実行過程はまず中間コードにコンパイルされ,特定の仮想マシンを介して特定の命令に翻訳されて実行される必要がある.その実行手順は、PHP => Token => => Opcodes => です.
各ステップの内容は以下の通りである:ソースコードは文法分析によってTokenTokenがPHPコードが切断された有意義な標識であることを得た.PHP 7は全部で137種類のTokenがあり、zend_language_parser.hファイルで定義しました.
構文解析器に基づいてTokenを抽象構文ツリー(AST)Tokenに変換することは個々の語ブロックであるが,個々の語ブロックは完全な意味を表現することができず,一定の規則によって組織的に直列に接続する必要がある.したがって,構文解析器は構文マッチングTokenに基づいてTokenを直列に接続する必要がある.構文解析器がTokenを直列に接続した後の生成物が抽象構文ツリー(AST,Abstract Syntax Tree)である.
ASTはPHP 7バージョンの新機能で、以前のバージョンのPHPコードの実行中にASTを生成するステップはありませんでした.その役割は主にPHPコンパイラと解釈器のデカップリングを実現し、メンテナンス性を向上させた.
構文ツリーをOpcodeに変換するには、エンジンによって直接実行される前に構文ツリーをOpcodeに変換する必要があります.
実行Opcodesopcodesはopcodeの集合形式であり,PHP実行中の中間コードである.PHPエンジニアリングの最適化には、一般的な「opcacheを開く」という技術があります.ここではopcodesをキャッシュします.ソースコードからopcodeへのフェーズを省くことで、エンジンはキャッシュされたopacodeを直接実行し、パフォーマンスを向上させます.
PHP 7カーネルアーキテクチャ
zendエンジンの構文/構文解析,ASTコンパイル,opcodesの実行はZendエンジンで実現される.また,PHPの変数設計,メモリ管理,プロセス管理などもエンジン層で実現している.
PHP層zendエンジンはPHPに基礎能力を提供し、外部からのインタラクションはPHP層で処理する必要がある.
SAPIserver APIの略で、シーンのcli SAPIとfpm SAPIが含まれています.定義されたSAPIプロトコルを遵守すれば、外部モジュールはPHPとのインタラクションを完了することができる.
拡張部分はzendエンジンが提供するコア能力とインタフェース規範に基づいて、開発拡張を行うことができる.
PHP 7のソース構造php 7のソースコードの主なディレクトリはsapi、Zend、main、ext、TSRMである.sapiディレクトリsapiディレクトリは入力と出力層の抽象であり,PHPが対外サービスを提供する規範である.いくつかの一般的なSAPI:1)apache 2 handler:Apache拡張、コンパイル後にダイナミックリンクライブラリを生成し、Apacheの下に配置します.httpリクエストがApacheにある場合、このダイナミックリンクライブラリは構成に応じて呼び出され、PHPコードが実行され、PHPとのインタラクションが完了します.2)cgi-fcgi:コンパイル後にCGIプロトコルをサポートする実行可能プログラムを生成し,webserver(NGINXなど)はCGIプロトコルを介して要求をCGIプロセスに伝達し,CGIプロセスは要求に応じて対応するコードを実行した後に実行結果をwebserverに返す.3)fpm-fcgi:fpmはFastCGIプロセスマネージャである.NGINXサーバを例にとると,要求がNGINXサーバに送信されると,NGINXはFastCGIプロトコルに従ってphp−fpmプロセスに要求を渡す.4)cli:PHPのコマンドラインインタフェースZendディレクトリZendディレクトリはPHPのコアコードである.PHPにおけるメモリ管理,ゴミ回収,プロセス管理,変数,配列実装などはいずれもこのディレクトリのソースコードに含まれる.
mainディレクトリmainディレクトリはSAPI層とZend層の接着剤です.Zend層はPHPスクリプトのコンパイルと実行を実現し,sapi層は入力と出力の抽象化を実現し,mainディレクトリはそれらの間で上から下への役割を果たしている.これにより、SAPIの要求を解析し、実行するスクリプトファイルとパラメータを分析する.起動してzendエンジンを呼び出す前に、必要なモジュールの初期化などの作業を完了します.
extディレクトリextはPHP拡張関連ディレクトリであり、よく使われるarray、str、pdoなどのシリーズ関数がここで定義されている.
TSRMTSRM(Thread Safe ResourceManager)--スレッドセキュリティエクスプローラは、リソースの共有を保証するためのセキュリティです.
参考資料『PHP 7下地設計とソースコード実現』
ここを見て多くのPHPerがPHPの高級、アーキテクチャを昇格させて自分を向上させ、昇給したいと思っているに違いない.Swoole、laravelソース、TP 6、同時プログラミング、Swoftマイクロサービス、性能最適化、高同時化などの技術を深く勉強して、私はここでPHPアーキテクチャの学習経験、および完全なアーキテクチャのチュートリアルを準備して、ここを突き刺してください