php 変数コンポーネント:
変数名: PHP 言語の変数名は $ + 英語/アンダースコアで始まり、数字、アンダースコア、文字を含めることができ、大文字と小文字が区別されます。同時に、PHP は $$A の形式の複合変数もサポートしており、これにより PHP のダイナミクスが向上します。
型: PHP は弱い型付け言語であり、任意の型の値を割り当てることができます。
内容: 同時に存在できる値は 1 つだけです。
PHP 言語には 8 つのデータ型があり、3 つの主要なカテゴリに分類されます:
1. スカラー型: ブール、整数、浮動小数点、文字列。
3. 特殊なタイプ: NULL、リソース。
zval データ構造:
リーリー
リーリー
ハッシュテーブル:
PHP 内の多くの実装は、変数スコープ、関数テーブル、クラス属性、メソッドなどのハッシュ テーブルに基づいています。Zend エンジン内の多くのデータはハッシュ テーブルに保存されます。
PHP 配列は、ハッシュ テーブルを使用して関連データを保存します。ハッシュ テーブルの実装では、HashTable と Bucket の 2 つのデータ構造が使用されます。
HashTable の容量の拡張は、常に初期サイズの 2 の整数乗に近づくように調整されます。理由:
スロットを選択する場合、モジュロ演算の代わりに & 演算が使用されます。これは、モジュロ演算がビット単位の AND 演算よりも比較的高価であるためです。マスクの機能は、スロットが保存できるインデックス範囲にハッシュ値をマップすることです。 たとえば、特定のキーのインデックス値は 21、ハッシュ テーブルのサイズは 8、マスクは 7、合計の 2 進表現は 10101 & 111 = 101 (10 進数では 5) となります。 2 の整数 -1 乗の 2 進数系は特殊であるため、次の N ビットの値はすべて 1 となり、通常の数値であり 2 進数で結合される場合、値のマッピングが容易になります。 、ハッシュ値の結果に影響します。その場合、ハッシュ関数によって計算された値の平均分布が影響を受ける可能性があります。
ハッシュ値はハッシュインデックスの代わりにバケットに保存されます。 上記の構造体の最後のフィールドはキー文字列を保存するために使用されますが、このフィールドは 1 文字だけの配列として宣言されています。実際、これは一般的な可変長構造体であり、その主な目的は柔軟性を高めることです。 以下は、ハッシュ テーブルに新しい要素を挿入するときにスペースを適用するコードです
リーリー プロセス図を挿入ハッシュアルゴリズム
phpのハッシュ関数はDJBX33Aアルゴリズムを使用して実装されています。
PHP オブジェクトはデータ構造 zend_object_value; を使用して保存されます
www.bkjia.com