PHP では配列がよく使われます。各要素のサイズが同じであるため、読み取りと書き込みは瞬時に計算できます。メモリ内の対応する要素の位置を特定するため、直接取り出したり書き込んだりできます。では、配列はカーネルにどのように実装されるのでしょうか?
PHP のほとんどの関数は、配列を含めて HashTable を通じて実装されます。
HashTable は二重リンクリストの利点を持ち、データに匹敵する演算性能を持っています。
-
PHP で定義された変数はシンボル テーブルに格納されます。このシンボル テーブルは実際には HashTable であり、その各要素は zval* 型の変数です。それだけでなく、ユーザー定義の関数、クラス、リソースなどを格納するコンテナーが HashTable の形式でカーネルに実装されます。
PHP とカーネルでそれぞれ配列を定義する方法を見てみましょう。
配列定義の実装
PHPで配列を定義します:
れーれー
これを実現するには、カーネルでマクロを使用します。
れーれー
上記のコードのマクロを展開します:
れーれー
便利な配列マクロ操作
カーネルは、配列を管理するための便利なマクロを提供します。
リーリー
以下では、一般的な配列操作に対応するマクロを比較できます。
add_next_index_*()
れーれー
add_index_*()
れーれー
add_assoc_*()
れーれー
完全な例
次に、PHP で関数を定義し、その中で配列を使用します。次に、それをカーネルに実装する方法を見てみましょう。
れーれー
カーネルに実装:
れーれー
上記のコードの変数 return_value がどこで定義されているか疑問に思うかもしれません。以下の PHP_FUNCTION を展開すると理解できます。
れーれー
そうです、実際、すべての関数にはデフォルトの戻り値 return_value があります。関数の戻り値として RETVAL_*()、RETURN_*() を使用する場合、return_value のみが変更されます。
http://www.bkjia.com/PHPjc/777570.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/777570.html技術記事 PHP では配列がよく使われます。PHP の配列は、各要素のサイズが同じであるため、読み取りと書き込みを瞬時に行うことができます。 .