Maison >développement back-end >PHP7 >Cet article vous amènera à analyser le zval de php7
Zval est l'une des structures de données les plus importantes de PHP. Elle contient des informations sur la valeur et le type des variables en 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;};
la structure de zval est relativement simple et se compose de trois parties :
Afin de voir la structure de zval et la valeur du champ principal de manière plus intuitive, prenons la photo ci-dessus.
Explication pour u1.v.type :
La définition de zend_value dans zval est la suivante :
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;
Dans un zval :
donc un zval occupe 16 octets. En conséquence, en php5, la taille d'un zval est de 48 octets, ce qui constitue en effet une énorme amélioration.
peuvent être directement distingués selon zval.u1.v.type, sans la participation de zend_value
sont directement stockés dans le lval ou dval de zend_value.
Utilisez le pointeur correspondant à zend_value pour pointer vers sa structure spécifique.
Par exemple, la structure du type chaîne est
struct _zend_string { zend_refcounted_h gc; zend_ulong h; /* hash value */ size_t len; char val[1]; };
L'organisation de la mémoire d'une variable chaîne est comme indiqué dans la figure ci-dessous, zval.value.str pointe vers la structure zend_string.
Zval est l'une des structures de données les plus importantes de PHP. Elle contient des informations sur la valeur et le type des variables en PHP.
Apprentissage recommandé : "Tutoriel PHP7"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!