最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入解析PHP的引用計數(shù)機(jī)制

 更新時間:2013年06月14日 15:25:37   投稿:jingxian  
本篇文章是對PHP中的引用計數(shù)機(jī)制進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

PHP的變量聲明并賦值后,變量名存在符號表中,而值和類信息存在zval中,zval中包含四個變量,is_ref,refcount,value,type,zval源碼如下

復(fù)制代碼 代碼如下:

struct _zval_struct { 
    /* Variable information */ 
    zvalue_value value;     /* value */ 
    zend_uint refcount__gc; 
    zend_uchar type;    /* active type */ 
    zend_uchar is_ref__gc; 
};

refcount表示value地址與其相同的zval共有多少個,refcount=0時,zval被銷毀
is_ref表示一個zval是否被引用,有“0”和“1”兩種狀態(tài)

此處分析一下什么時候zval會被復(fù)制或者開辟新的內(nèi)存空間呢
1.當(dāng)is_ref=0,且refcount>1時,如果改變某個指向該zval的變量的值,會生成新zval,原zval的refcount--,例如:$a=1;$b=$a;$b=2;,zval將被復(fù)制,也就是說原先ab指向同一個zval,后來b會使用新開辟的zval

2.當(dāng)is_ref=0,且refcount>1時,如果將zval賦值給某個引用變量,那么用來賦值和變量和被賦值的變量會使用同一個原zval,而其他指向原zval的變量將會指向一個新復(fù)制的zval,且refcount會被重新計算,例如:$a=1;$b=$a;$c=$a;$d=&$a;,此時ad使用原zval,bc使用新復(fù)制出來的zval

3.當(dāng)is_ref=1,且refcount>1時,如果將zval復(fù)制給某個非引用變量,該非引用變量會使用一個新復(fù)制的zval,元zval的refcount不變,例如:$a=1;$b=&$a;$c=$a,那么ab使用原zval,而c使用新復(fù)制的zval
type表示該zval的值類型,宏定義如下

復(fù)制代碼 代碼如下:

#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

value表示該zval的值,他也是個共同體,代碼如下
復(fù)制代碼 代碼如下:

typedef union _zvalue_value { 
    long lval;                  /* long value */ 
    double dval;                /* double value */ 
    struct { 
        char *val; 
        int len; 
    } str; 
    HashTable *ht;              /* hash table value */ 
    zend_object_value obj; 
} zvalue_value;

現(xiàn)在你知道php是如何類型變換的了,因為他的值存的其實(shí)是個可以代表任何類型的結(jié)構(gòu)體,而具體的取值則根據(jù)type來決定是用共同體里的哪個變量來存值的
 
見下面的例子1
復(fù)制代碼 代碼如下:

.-----------
$a = 1;
$b = $a;
$c = $a;
.-----------
$d = &$a;
.-----------
$a = 2;
.-----------
$b = null;

查看refcount,is_ref,zval的變化
執(zhí)行完第一部分后來看看輸出
1-----------------------------
a:(refcount=3, is_ref=0),int 1
b:(refcount=3, is_ref=0),int 1
c:(refcount=3, is_ref=0),int 1
可以看出來a,b,c使用同一個zval
再看執(zhí)行完第二部分的
2----------------------------
a:(refcount=2, is_ref=1),int 1
b:(refcount=2, is_ref=0),int 1
c:(refcount=2, is_ref=0),int 1
d:(refcount=2, is_ref=1),int 1
注意此時a,d在一起了,他們使用同一個zval,而bc使用一個新生成的zval,同時重新計算兩個zval的refcount和is_ref

相關(guān)文章

  • 在PHP中檢查PHP文件是否有語法錯誤的方法

    在PHP中檢查PHP文件是否有語法錯誤的方法

    在網(wǎng)上找了一下。剛開始以為 token_get_all()函數(shù)能處理語法錯誤的問題,結(jié)果發(fā)現(xiàn),它只是做簡單的詞法分析。沒有辦法。后來到論壇上去問了一下
    2009-12-12
  • PHP實(shí)現(xiàn)文字寫入圖片功能

    PHP實(shí)現(xiàn)文字寫入圖片功能

    這篇文章主要為大家詳細(xì)介紹了PHP實(shí)現(xiàn)文字寫入圖片功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • php判斷對象是派生自哪個類的方法

    php判斷對象是派生自哪個類的方法

    這篇文章主要介紹了php判斷對象是派生自哪個類的方法,涉及php使用instanceof判斷對象的技巧,需要的朋友可以參考下
    2015-06-06
  • php對圖像的各種處理函數(shù)代碼小結(jié)

    php對圖像的各種處理函數(shù)代碼小結(jié)

    這篇文章主要介紹了php的圖片處理實(shí)現(xiàn)代碼,包括縮放、剪裁、縮放、翻轉(zhuǎn)、旋轉(zhuǎn)、透明、銳化等圖片操作,需要的朋友可以參考下
    2013-07-07
  • PHP頁面實(shí)現(xiàn)定時跳轉(zhuǎn)的方法

    PHP頁面實(shí)現(xiàn)定時跳轉(zhuǎn)的方法

    這篇文章主要介紹了PHP頁面實(shí)現(xiàn)定時跳轉(zhuǎn)的方法,實(shí)例演示使用header函數(shù)來實(shí)現(xiàn)跳轉(zhuǎn)的技巧,需要的朋友可以參考下
    2014-10-10
  • PHP操作XML的教程詳解

    PHP操作XML的教程詳解

    這篇文章主要為大家詳細(xì)介紹了PHP操作XML的方法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定的參考價值,感興趣的可以了解一下
    2022-05-05
  • PHP使用DES進(jìn)行加密與解密的方法詳解

    PHP使用DES進(jìn)行加密與解密的方法詳解

    本篇文章是對PHP使用DES進(jìn)行加密與解密的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • php面向?qū)ο蟪绦蛟O(shè)計介紹

    php面向?qū)ο蟪绦蛟O(shè)計介紹

    在面向?qū)ο蟮某绦蛟O(shè)計(英語:Object-oriented programming,縮寫:OOP)中,對象是一個由信息及對信息進(jìn)行處理的描述所組成的整體,是對現(xiàn)實(shí)世界的抽象
    2023-04-04
  • PHP 匿名函數(shù)與注意事項詳細(xì)介紹

    PHP 匿名函數(shù)與注意事項詳細(xì)介紹

    這篇文章主要介紹了PHP 匿名函數(shù)與注意事項詳細(xì)介紹的相關(guān)資料,匿名函數(shù)是PHP5.3引進(jìn)來了,php5.3不但引進(jìn)了匿名函數(shù)還有更多更好多新的特性了,下面我們一起來了解一下PHP匿名函數(shù)與注意事項詳解,需要的朋友可以參考下
    2016-11-11
  • php+ajax實(shí)時輸入自動搜索匹配的方法

    php+ajax實(shí)時輸入自動搜索匹配的方法

    這篇文章主要介紹了php+ajax實(shí)時輸入自動搜索匹配的方法,實(shí)例分析了兩種實(shí)現(xiàn)方法,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-12-12

最新評論

双牌县| 海阳市| 周宁县| 赤水市| 喀喇沁旗| 信丰县| 论坛| 宁强县| 石泉县| 梁平县| 大田县| 北海市| 都兰县| 贵定县| 渝北区| 民勤县| 容城县| 囊谦县| 平塘县| 辰溪县| 句容市| 无为县| 光泽县| 宿迁市| 苗栗县| 阿克陶县| 浙江省| 琼中| 合川市| 昌图县| 辽中县| 库尔勒市| 金华市| 昭觉县| 红安县| 安阳市| 嫩江县| 隆林| 韶山市| 庄河市| 磐安县|