ホームページ  >  記事  >  バックエンド開発  >  PHP カーネルで調査される変数、_PHP チュートリアル

PHP カーネルで調査される変数、_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 09:02:36797ブラウズ

PHP カーネル探索変数、

php 変数コンポーネント:

変数名: PHP 言語の変数名は $ + 英語/アンダースコアで始まり、数字、アンダースコア、文字を含めることができ、大文字と小文字が区別されます。同時に、PHP は $$A の形式の複合変数もサポートしており、これにより PHP のダイナミクスが向上します。

型: PHP は弱い型付け言語であり、任意の型の値を割り当てることができます。

内容: 同時に存在できる値は 1 つだけです。

PHP 言語には 8 つのデータ型があり、3 つの主要なカテゴリに分類されます:

1. スカラー型: ブール、整数、浮動小数点、文字列。

2. 複合型: オブジェクト、配列。


3. 特殊なタイプ: NULL、リソース。

PHP は弱い型指定の言語です。実装内のすべての変数は、変数の値だけでなく、PHP の弱い型の核となる変数の型も含む構造体 zval を介してデータを保存します。

zval データ構造:
リーリー

Zvalue_value は構造体ではありません。変数は同時に 1 つの型しか表現できないため、メモリを節約するために Union を使用して実装されます。そのプロトタイプ:

リーリー

ハッシュテーブル:

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; を使用して保存されます

興味があるかもしれない記事:

php デザインパターンインタープリター (インタープリターモード)

PHP デザインパターンのインタープリターモードの詳細な分析
  • PHP カーネルの探索: 変数ストレージと型の使用方法
  • PHP カーネルの探索: 変数の概要
  • PHPカーネル探索: ハッシュテーブル衝突攻撃の原理
  • PHPカーネル探索のインタプリタの実行処理
http://www.bkjia.com/PHPjc/1084571.html

www.bkjia.com

http://www.bkjia.com/PHPjc/1084571.html技術記事 PHP カーネルによって探索される変数、PHP 変数のコンポーネント: 変数名: PHP 言語の変数名は $ + 英語/アンダースコアで始まり、数字、アンダースコア、文字を含めることができ、大文字と小文字が区別されます。その間に…
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。