PHP ZVAL是PHP中最重要的資料結構之一,包含了PHP中的變數值和類型的相關信息,它是struct結構,基本結構為【struct _zval_struct(zvalue_value value zend_uchar type)】 。
PHP ZVAL的意思是:
ZVAL的基本結構
Zval是PHP中最重要的資料結構之一(另一個比較重要的資料結構是hash table
),它包含了PHP中的變數值和類型的相關資訊。
它是一個struct,基本結構為:
struct _zval_struct { zvalue_value value; /* 存储变量的值*/ zend_uint refcount__gc; /* 表示引用计数 */ zend_uchar type; /* 变量具体的类型 */ zend_uchar is_ref__gc; /* 表示是否为引用 */ }; typedef struct _zval_struct zval;
其中:
1、zval_value value
zvalue_value
的聯合體(union):typedef union _zvalue_value { long lval; /* long value */ double dval; /* double value */ struct { /* string */ char *val; int len; } str; HashTable *ht; /* hash table value,used for array */ zend_object_value obj; /* object */ } zvalue_value;
#2、
zend_uint refcount__gc
在變數產生時,其refcount=1,典型的賦值運算如a=b會令zval的refcount加1,而unset操作會對應的減1。在PHP5.3之前,使用引用計數的機制來實作GC,如果一個zval的 refcount較少到0,那麼Zend引擎會認為沒有任何變數指向該zval,因此會釋放該zval所佔的記憶體空間。
3、
zend_uchar type
在zend內部,這些類型對應到下面的巨集(程式碼位置
phpsrc/Zend/zend.h):
#define IS_NULL 0 #define IS_LONG 1 #define IS_DOUBLE 2 #define IS_BOOL 3 #define IS_ARRAY 4 #define IS_OBJECT 5 #define IS_STRING 6 #define IS_RESOURCE 7 #define IS_CONSTANT 8 #define IS_CONSTANT_ARRAY 9 #define IS_CALLABLE 10
#4、######這個欄位用來標記變數是否為引用變數。對於普通的變量,該值為0,而對於引用型的變量,該值為1。這個變數會影響zval的共享、分離等。關於這點,我們之後會有論述。 ######正如名字所示,###ref_count__gc###和###is_ref__gc###是PHP的GC機制所需的很重要的兩個字段,這兩個字段的值,可以通過xdebug等調試工具查看。 ###### #########相關學習推薦:###PHP程式設計從入門到精通#########
以上是PHP ZVAL是什麼意思?的詳細內容。更多資訊請關注PHP中文網其他相關文章!