PHPのオペコード
元のアドレス: http://blog.csdn.net/laruence/archive/2008/07/18/2673488.aspx
Opcode は、Java の ByteCode や NET の MSL と同様に、PHP スクリプトによってコンパイルされる中間言語です。たとえば、次の PHP コードを作成した場合:
echo "Hello World";
$a = 1 + 1;
echo $a;
PHP は、このコードを実行するときに次の 4 つのステップを実行します。 、それは PHP の言語エンジン Zend である必要があります)
1. スキャン (Lexing)、PHP コードを言語フラグメント (トークン) に変換します
2. 解析、トークンを単純で意味のある式に変換します
3. コンパイル、式をオペコードにコンパイルします
4.実行では、オペコードを一度に 1 つずつ順番に実行し、PHP スクリプトの機能を実現します。
注: APC などの一部のキャッシュでは、PHP がオペコードをキャッシュできるようになりました。これにより、リクエストが届くたびに最初の 3 つの手順を繰り返す必要がなくなり、PHP の実行速度が大幅に向上します。
それでは、字句解析とは何でしょうか? コンパイル原理を学習した学生は、字句解析の基礎テーブルであるコンパイル原理を理解しているはずです。 Zend/zend_ language_scanner.c は、Zend/zend_ language_scanner.l (Lex ファイル) を元に入力された PHP コードを字句解析し、「単語」を 1 つずつ取得する機能です。 PHP コードの一部をスキャンしてトークンに変換することについて
この関数を使用して最初に説明した PHP コードを処理すると、次の結果が得られます:
Array (
[0] => Array (
[ 0] => 367
) ] => [5 ] => 配列 (
0) => 370 [1] => ; 配列 (
[0 ] => 370
[1] => )
[10] => +
[11] =>
)
( [14] => 配列 (
[0 ] => 370
[1] =>
[16] =>
この戻り結果を分析すると、ソースコード内の文字列、文字、スペースが変更されずに返されることがわかります。各ソース コード内の文字は、対応する順序で表示されます。ただし、タグ、演算子、ステートメントなどの他の項目は、トークン ID (つまり、T_ECHO、T_STRING など、Zend 内のトークンを変更するための対応するコード) と元のコードの 2 つの部分を含む配列に変換されます。ソースコード。
次のステップは解析段階です。解析では、まずトークン配列内の余分なスペースが破棄され、次に残りのトークンが 1 つずつ単純な式に変換されます
1。2 つの数値を加算します
3。 . 前の式の結果を変数に保存します
4. 変数をエコーします
その後、トークンを 1 つずつ op_array にコンパイルします:
2 などの各 op_array の操作タイプを示します。 結果 オペコードの結果
3 を格納します。オペランド 1 はオペコード 2
5 のオペランドです。オーバーロードされた演算子
たとえば、PHP コードは次のように解析されます:
* ZEND_ECHO 'Hello World'
* ZEND_ASSIGN !0 ~0
* ZEND_ECHO !0
ははは、どこで私たちの$aは行きましたか?
さて、ここでオペランドを紹介します。各オペランドは次の 2 つの部分で構成されます。
b) u、op_type に応じた共用体 違いオペランドの値 (const) または左辺値 (var) が異なる型で保存されることです。 var の場合、各変数は異なります。名前が示すように、これは op_array の一部の結果を保存する一時変数です。次の op_array。このタイプのオペランドの u は、変数テーブルを指すハンドル (整数) を保持します。このタイプのオペランドは、通常、変数テーブル内の 0 を表す ~0 で始まります。
IS_VAR これは、$ で始まる変数です。
IS_CV は、ZE2.1/PHP5.1 以降のコンパイラによって使用されるキャッシュ機構を表します。変数が初めて参照される場合、この変数に対するその後の参照では、アクティブなシンボル テーブルを再度検索する必要はありません。始まりはそれを示しています。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHPロギングは、Webアプリケーションの監視とデバッグ、および重要なイベント、エラー、ランタイムの動作をキャプチャするために不可欠です。システムのパフォーマンスに関する貴重な洞察を提供し、問題の特定に役立ち、より速いトラブルシューティングをサポートします

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。
