
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 の紹介です。皆さんのお役に立てれば幸いです。