PHPZVAL是什么意思?

PHP ZVAL是PHP中最重要的數(shù)據(jù)結(jié)構(gòu)之一,包含了PHP中的變量值和類型的相關(guān)信息,它是struct結(jié)構(gòu),基本結(jié)構(gòu)為【struct _zval_struct(zvalue_value value zend_uchar type)】。

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),云浮企業(yè)網(wǎng)站建設(shè),云浮品牌網(wǎng)站建設(shè),網(wǎng)站定制,云浮網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,云浮網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

PHP ZVAL的意思是:

ZVAL的基本結(jié)構(gòu)

Zval是PHP中最重要的數(shù)據(jù)結(jié)構(gòu)之一(另一個比較重要的數(shù)據(jù)結(jié)構(gòu)是hash table),它包含了PHP中的變量值和類型的相關(guān)信息。

它是一個struct,基本結(jié)構(gòu)為:

struct _zval_struct {
    zvalue_value value;     /* 存儲變量的值*/
    zend_uint refcount__gc;  /* 表示引用計數(shù) */
    zend_uchar type;          /* 變量具體的類型 */
    zend_uchar is_ref__gc;    /* 表示是否為引用 */
};
typedef struct _zval_struct zval;

其中:

1、zval_value value

變量的實(shí)際值,具體來說是一個zvalue_value的聯(lián)合體(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

該值實(shí)際上是一個計數(shù)器,用來保存有多少變量(或者符號,symbols, 所有的符號都存在符號表(symble table)中, 不同的作用域使用不同的符號表,關(guān)于這一點(diǎn),我們之后會論述)指向該zval。

在變量生成時,其refcount=1,典型的賦值操作如a=b會令zval的refcount加1,而unset操作會相應(yīng)的減1。在PHP5.3之前,使用引用計數(shù)的機(jī)制來實(shí)現(xiàn)GC,如果一個zval的 refcount較少到0,那么Zend引擎會認(rèn)為沒有任何變量指向該zval,因此會釋放該zval所占的內(nèi)存空間。

但,事情有時并不會那么簡單。后面 我們會看到,單純的引用計數(shù)機(jī)制無法GC掉循環(huán)引用的zval,即使指向該zval的變量已經(jīng)被unset,從而導(dǎo)致了內(nèi)存泄露(Memory Leak)。

3、zend_uchar type

該字段用于表明變量的實(shí)際類型。在開始學(xué)習(xí)PHP的時候,我們已經(jīng)知道,PHP中的變量包括四種標(biāo)量類(bool,int,float,string),兩種復(fù)合類型(array, object)和兩種特殊的類型(resource 和NULL)。

在zend內(nèi)部,這些類型對應(yīng)于下面的宏(代碼位置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、is_ref__gc

這個字段用于標(biāo)記變量是否是引用變量。對于普通的變量,該值為0,而對于引用型的變量,該值為1。這個變量會影響zval的共享、分離等。關(guān)于這點(diǎn),我們之后會有論述。

正如名字所示,ref_count__gcis_ref__gc是PHP的GC機(jī)制所需的很重要的兩個字段,這兩個字段的值,可以通過xdebug等調(diào)試工具查看。

網(wǎng)頁題目:PHPZVAL是什么意思?
文章源于:http://muchs.cn/article46/cjjieg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、搜索引擎優(yōu)化網(wǎng)站制作、微信小程序、網(wǎng)站設(shè)計、網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站