この記事では、php7 の zval を分析します。
zval
Zval は、PHP で最も重要なデータ構造の 1 つで、PHP の変数の値と型に関する情報が含まれています。
1. zval
1.1 zval の構造 (zend_types.h)
typedef struct _zval_struct zval;struct _zval_struct { zend_value value; /* value */ union { struct { ZEND_ENDIAN_LOHI_4( zend_uchar type, /* active type */ zend_uchar type_flags, zend_uchar const_flags, zend_uchar reserved) /* call info for EX(This) */ } v; uint32_t type_info; } u1; union { uint32_t var_flags; uint32_t next; /* hash collision chain */ uint32_t cache_slot; /* literal cache slot */ uint32_t lineno; /* line number (for ast nodes) */ uint32_t num_args; /* arguments number for EX(This) */ uint32_t fe_pos; /* foreach position */ uint32_t fe_iter_idx; /* foreach iterator index */ } u2;};
ログイン後にコピー
zval の構造は比較的単純で、次の 3 つの部分で構成されます:
- zend_value: 特定の変数型の値またはポインターを保存します
- u1 の中心的な機能は型を区別することです
- u2 は補助値です
- IS_UNDEF: マークは未定義で、データが上書きまたは削除できることを示します。たとえば、配列要素に対して unset 操作を実行する場合、PHP 7 は HashTable に割り当てられたメモリからデータを直接削除せず、その代わりに、要素が配置されているバケットの場所を最初に IS_UNDEF としてマークします。 HashTable 内の IS_UNDEF 要素の数は、特定のしきい値に達すると、IS_UNDEF でマークされた要素が再ハッシュ操作中に上書きまたは削除されます。 IS_TRUE と IS_FALSE: ここでは IS_BOOL が 2 つに最適化されており、Boolean 型タグが type に直接記録されます。 IS_REFERENCE: 新しい型です。PHP7 では「&」を処理するために別の処理方法が使用されます。 IS_INDIRECT: これも新しい型です。PHP 7 では HashTable の設計が異なるため、 PHP5 とは大きな違いがあるため、グローバル シンボル テーブルが CV 変数テーブルにアクセスする問題を解決するために、IS_INDRECT 型が導入されました。 IS_PTR: この型はポインター型として定義され、value.ptr の解析に使用され、通常は関数型で使用されます。たとえば、関数またはメソッドを宣言します。
typedef union _zend_value { zend_long lval; /* long value */ double dval; /* double value */ zend_refcounted *counted; zend_string *str; zend_array *arr; zend_object *obj; zend_resource *res; zend_reference *ref; zend_ast_ref *ast; zval *zv; void *ptr; zend_class_entry *ce; zend_function *func; struct { uint32_t w1; uint32_t w2; } ww; } zend_value;
ログイン後にコピー
- zend_value は共用体であり、8 バイトのみを占有します。 zend_long、double、またはポインタを格納するのに十分です。 u1 は 4 バイトで、v または type_info を格納します。u2 は 4 バイト
struct _zend_string { zend_refcounted_h gc; zend_ulong h; /* hash value */ size_t len; char val[1]; };
ログイン後にコピー
PHP7 チュートリアル 」
以上がこの記事では、php7 の zval を分析します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事
アサシンのクリードシャドウズ:シーシェルリドルソリューション
4週間前
By DDD
Windows11 KB5054979の新しいものと更新の問題を修正する方法
3週間前
By DDD
Atomfallのクレーンコントロールキーカードを見つける場所
4週間前
By DDD
<🎜>:Dead Rails-すべての課題を完了する方法
1 か月前
By DDD
Atomfall Guide:アイテムの場所、クエストガイド、およびヒント
1 か月前
By DDD

ホットツール

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

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

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

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

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

ホットトピック
Gmailメールのログイン入り口はどこですか?
7700
15


Java チュートリアル
1640
14


CakePHP チュートリアル
1393
52


Laravel チュートリアル
1287
25


PHP チュートリアル
1230
29

