この記事は、もともとThomas Puntが執筆し、許可を得て転載したこの記事では、PHPでカスタムレンジオペレーター(|>)の作成について詳しく説明しています。 ソースからのPHPの構築に精通していると仮定して、PHP内部に深く掘り下げられています(ガイダンスについては、PHP Internals Bookを参照)。
このプロセスには、レクサー、パーサー、コンピレーション段階、Zend VMの4つの重要な領域の変更が含まれます。
lexerが変更されています(zend/zend_language_scanner.l) "|>" トークンを生成します。 その後、RE2Cを使用してレクサーを再生します。トークンはZend/zend_language_parser.yでも宣言されています。 最後に、ファイルにはT_RANGE
を使用して再生が必要です。トークン剤の拡張が新しいトークンを認識していることを確認します。
T_RANGE
ext/tokenizer/tokenizer_data.c
tokenizer_data_gen.sh
)が。に作成されます
T_RANGE
ZEND_AST_RANGE
Zend/zend_ast.h
機能が追加され、 opcode。
ZEND_AST_RANGE
zend_compile_range
ZEND_RANGE
を使用して再生されます。 最後に、新しいオペレーターを正しく表示するようにのASTプリティプリンターが更新されます。
ZEND_RANGE
Zend/zend_vm_gen.php
Zend/zend_ast.c
範囲演算子セマンティクス:
オペレーターは、2つのオペランドに基づいて配列を作成します(minとmax):
1つずつ増加します。
|>
オペランドは整数またはフロートでなければなりません。
min == max
Error
min > max
1 |> 3; // [1, 2, 3] 2.5 |> 5; // [2.5, 3.5, 4.5] $a = $b = 1; $a |> $b; // [1] 2 |> 1; // Error exception 1 |> '1'; // Error exception new StdClass |> 1; // Error exception
この詳細な説明は、プロセスの包括的な概要を提供します。 この記事は、これが1つの実装であり、将来の記事でより効率的なバージョンが検討されることに注意することで締めくくります。 FAQセクションも含まれており、範囲オペレーターの使用と動作に関する一般的な質問をカバーしています。
以上がPHPで範囲演算子を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。