1. コンセプト
Zval は Zend のもう 1 つの非常に重要なデータ構造で、PHP 変数を識別して実装するために使用されます。 PHP の変数の値と型に関する情報が含まれています。
2. 構成
type: 変数のタイプ (整数、文字列、配列など) を指定します。
refcount&is_ref: 参照カウントの実装に使用されます (詳細は後ほど説明します)。
value: 変数の実際のデータを格納するコア部分
3. 例
struct _zval_struct { 結合 { zend_long lval; /* 長い値 */ double dval; /* 倍精度の値 */ zend_refcounted *カウント; 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 *関数; 構造体 { uint32_t w1; uint32_t w2; } ww; } 価値; 結合 { 構造体 { ZEND_ENDIAN_LOHI_4( zend_uchar 型、/* アクティブ型 */ zend_uchar type_flags、 zend_uchar const_flags、 zend_uchar 予約済み) /* EX(This) の呼び出し情報 */ }v; uint32_t タイプ情報; u1; 結合 { uint32_t var_flags; uint32_t next; /* ハッシュ衝突チェーン */ uint32_t queue_slot; /* リテラル キャッシュ スロット */ uint32_t lineno; /* 行番号 (ast ノードの場合) */ uint32_t num_args; /* EX(This) の引数番号 */ uint32_t fe_pos; /* それぞれの位置 */ uint32_t fe_iter_idx; /* 各反復子のインデックス */ u2; };
以上が PHP での Zval の紹介です。皆さんのお役に立てれば幸いです。