この記事では、PHP原則の実行サイクルについて説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
PHP の実行サイクルは、最初に作成した PHP スクリプトから実行される最終スクリプトまで、実際には次の段階に分かれています。
まず、Zend Engine (ZE) は字句アナライザー (Lex によって生成され、ソース ファイルは Zend/zend_ language_sanner.l にあります) を呼び出し、実行する PHP ソース ファイルからスペースとコメントを削除し、それを次の式で 1 つのトークンに分割します。 1つ。その後、ZE は取得したトークンを構文アナライザー (yacc によって生成され、ソース ファイルは Zend/zend_ language_parser.y にあります) に転送し、オペコードを 1 つずつ生成します。オペコードは通常、op 配列の形式で存在します。 PHP実行言語の途中です。
最後に、ZE は zend_executor を呼び出して op 配列を実行し、結果を出力します。 (つまり、ソースファイルを機械語に変換してから、仮想マシン上で実行します。)
ZE は仮想マシンであるため、オペレーティング システムの種類を考慮せずに PHP スクリプトを作成できます。これが PHP の移植性の理由です。 ZE は CISC (複雑な命令プロセッサ) であり、最も単純な ZEND_ECHO (エコー) から複雑な ZEND_INCLUDE_OR_EVAL (include、require) までを含む 150 の命令をサポートします (具体的な命令は Zend/zend_vm_opcodes.h にあります)。書かれた内容は、最終的にこれら 150 個の命令 (オペコード) のシーケンスに処理され、最終的に実行されます
。 PHP はスクリプト言語です。つまり、ユーザーが作成した PHP コードは、最終的には PHP インタープリターによって解釈され、実行され、PHP 仮想マシン ZE の仮想命令 (OPCODES) に変換されます。実行のために。
では、PHP スクリプトは最終的に何に「翻訳」されるのでしょうか? 言い換えれば、オペコードはどのようなものになるでしょうか?オペコードは、PHP スクリプトからコンパイルされた中間言語です
。PECL には、Derick Rethans によって開発された VLD (Vulcan Logic Dissassembler) モジュールを利用したそのようなモジュールがすでに存在します。このモジュールをダウンロードしてPHPに読み込むだけで、簡単な設定でスクリプトの翻訳結果を得ることができます。
VLDモジュールのインストールと適用:リーリー
php.ini ファイルを編集し、vld 拡張機能を有効にします。例:
次のようなファイルを作成します: hello.php
リーリー
実行:リーリー
別の動画を見る:リーリー
実行:リーリー
注: ZEND_HANDLE_EXCEPTION は Zend/zend_vm_opcodes.h の 149 番目の命令です
compiled vars: !0 = $i !0 (*zval) から取得した変数名 "i" を示します。 #0 文字列「this+is+a+string」を !0 に代入します
#1 文字列の連結
#2 ショー
これらの中間コードは、Zend VM (Zend Virtual Machine) によって直接実行されます。実際に実行を担当する関数は zend_execute (zend_execute.h) です。
この記事が PHP プログラミングのすべての人に役立つことを願っています。 http://www.bkjia.com/PHPjc/1133036.html