Zval ist eine der wichtigsten Datenstrukturen in PHP. Sie enthält Informationen über den Wert und Typ von Variablen in PHP.
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-Struktur ist relativ einfach und besteht aus drei Teilen:
Um die Struktur von zval und den Wert des Kernfelds intuitiver zu sehen, machen wir das Bild oben.
Erklärung für u1.v.type:
Die Definition von zend_value in zval lautet wie folgt:
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;
In einem zval:
also belegt ein zval 16 Bytes. Dementsprechend beträgt die Größe eines ZVAL in PHP5 48 Byte, was in der Tat eine enorme Verbesserung darstellt.
können direkt nach zval.u1.v.type ohne Beteiligung von zend_value unterschieden werden
werden direkt im lval oder dval gespeichert von zend_value.
Verwenden Sie den Zeiger, der zend_value entspricht, um auf seine spezifische Struktur zu zeigen.
Zum Beispiel ist die Struktur des String-Typs
struct _zend_string { zend_refcounted_h gc; zend_ulong h; /* hash value */ size_t len; char val[1]; };
Die Speicherorganisation einer String-Variablen ist wie in der Abbildung unten dargestellt, zval.value.str zeigt auf die zend_string-Struktur.
Zval ist eine der wichtigsten Datenstrukturen in PHP. Sie enthält Informationen über den Wert und Typ von Variablen in PHP.
Empfohlenes Lernen: „PHP7-Tutorial“
Das obige ist der detaillierte Inhalt vonIn diesem Artikel erfahren Sie, wie Sie den Zval von PHP7 analysieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!