
1. แนวคิด
Zval เป็นอีกหนึ่งโครงสร้างข้อมูลที่สำคัญมากใน zend ซึ่งใช้ในการระบุและใช้งานตัวแปร PHP มีข้อมูลเกี่ยวกับค่าตัวแปรและประเภทของ PHP
2. องค์ประกอบ
type: ระบุประเภทของตัวแปร (จำนวนเต็ม สตริง อาเรย์ ฯลฯ)
refcount&is_ref: ใช้เพื่อดำเนินการนับการอ้างอิง (แนะนำโดยละเอียดในภายหลัง)
ค่า: ส่วนหลักซึ่งเก็บข้อมูลจริงของตัวแปร
3. ตัวอย่าง
struct _zval_struct {
สหภาพ {
zend_long lval; /* ค่ายาว */
สองเท่า; /* ค่าสองเท่า */
zend_refcounted *นับ;
zend_string *str;
zend_array *arr;
zend_object *obj;
zend_resource *ความละเอียด;
zend_reference *อ้างอิง;
zend_ast_ref *ast;
zval *zv;
เป็นโมฆะ *ptr;
zend_class_entry *ce;
zend_function *func;
โครงสร้าง {
uint32_t w1;
uint32_t w2;
} ว็อ;
} ค่า;
สหภาพ {
โครงสร้าง {
ZEND_ENDIAN_LOHI_4(
ประเภท zend_uchar, /* ประเภทที่ใช้งานอยู่ */
zend_uchar type_flags,
zend_uchar const_flags,
zend_uchar สงวนไว้) /* ข้อมูลการโทรสำหรับ EX(นี่) */
} โวลต์;
uint32_t type_info;
} u1;
สหภาพ {
uint32_t var_flags;
uint32_t ถัดไป; /* ห่วงโซ่การชนกันของแฮช */
uint32_t cache_slot; /* สล็อตแคชตัวอักษร */
uint32_t lineno; /* หมายเลขบรรทัด (สำหรับโหนด ast) */
uint32_t num_args; /* หมายเลขอาร์กิวเมนต์สำหรับ EX (นี่) */
uint32_t fe_pos; /* ค้นหาตำแหน่ง */
uint32_t fe_iter_idx; /* foreach ดัชนีตัววนซ้ำ */
} u2;
-ข้างต้นนี้เป็นการแนะนำ Zval ใน PHP ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน