Zval ialah salah satu struktur data yang paling penting dalam PHP. Ia mengandungi maklumat tentang nilai dan jenis pembolehubah dalam 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;};
Struktur zval agak mudah dan terdiri daripada tiga bahagian:
Untuk paparan yang lebih intuitif Seterusnya, mari lihat struktur zval dan nilai medan teras, seperti yang ditunjukkan dalam gambar di atas.
Penjelasan untuk u1.v.type:
zend_value bagi zval ditakrifkan seperti berikut:
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;
Dalam zval:
jadi zval diduduki 16 bait . Sejajar dengan itu, dalam php5, saiz zval ialah 48 bait, yang sememangnya merupakan peningkatan yang besar.
boleh dibezakan secara langsung mengikut zval.u1.v.type tanpa penyertaan zend_value
disimpan terus dalam lval atau dval zend_value.
Gunakan penuding yang sepadan dengan zend_value untuk menunjuk ke struktur khususnya.
Contohnya, struktur jenis rentetan ialah
struct _zend_string { zend_refcounted_h gc; zend_ulong h; /* hash value */ size_t len; char val[1]; };
Organisasi memori pembolehubah rentetan adalah seperti yang ditunjukkan dalam rajah di bawah, zval.value.str menunjuk kepada struktur zend_string .
Zval ialah salah satu struktur data terpenting dalam PHP, yang mengandungi nilai pembolehubah dalam PHP dan maklumat berkaitan jenis.
Kajian yang disyorkan: "Tutorial PHP7"
Atas ialah kandungan terperinci Artikel ini akan membawa anda menganalisis zval php7. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!