日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php引用计数器,PHP 引用计数器 通俗版解释_PHP教程

發布時間:2025/3/12 php 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php引用计数器,PHP 引用计数器 通俗版解释_PHP教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PHP 引用計數器 通俗版解釋

概述

最近看PHP中的引用計數器部分,首先被各種繞暈,然后通過看博客和分析后,總結了一個比較通俗的解釋,能幫助自己很好地記憶,也希望能幫助到各位讀者。這里分享一遍博文,是比較正統的解釋:PHP變量之引用(http://hilojack.sinaapp.com/?p=1392)。

建議

研究PHP引用計數器的變化可以通過安裝Xdebug擴展來學習,安裝后直接調用 xdebug_debug_zval('var') 來看變量 $var的引用計數器情況。

基礎知識

談引用計數器需要對PHP中變量的存儲、引用計數的機制有所了解,引用計數當然是節約內存,在不影響語義正確性的前提下,讓多個變量符號共享一個內存值空間(又稱為變量容器)。引用計數什么時候發生變化:賦值。 賦值又有兩種: 值傳遞賦值和引用賦值。比較難以理解的是引用賦值。引用計數的另一個作用就是指示什么時候可以共用同一空間,什么時候必須進行變量分離(另開辟空間)。

通俗解釋

為了便于理解和記憶,本人對賦值中的各種情景給以通俗的解釋,不要與現實情況對號入座,

& 號是結合,可以相當于結婚,但是PHP中允許多個人一起結婚(即一夫多妻制或一妻多夫制),這個比較變態。 注意結婚必須同居,分居是不行的。除了結婚外還有一種形態叫 合租。合租也是同居,但是沒有任何關系,允許多人合租,這個是合情合理的。當然還有一種情況是獨居,這個比較容易理解。以下面的例子說明賦值語句與這三種狀態對應關系:

情景一:

$a = "a"; // $a 獨居, is_ref = 0, refcount = 1;

$b = $a; // $a 與 $b 合租, is_ref = 0, refcount = 2;情景二:

$a = "a"; // $a 獨居, is_ref = 0, refcount = 1;

$b = &$a; // $a 與 $b 結婚, is_ref = 1, refcount = 2;上面可以看出, is_ref可以理解為結婚證,=1 表示兩個和多個變量是結婚關系, =0沒有結婚(可以合租或同居),refcount表示了多少個變量住在一起了,=1表示獨居,>1表示多人同居(記住,結婚必須同居,但同居未必是結婚關系)。

下面開始分析賦值時的變量變化關系:

情景一:

$a = "a"; ?// $a 獨居, is_ref = 0, refcount = 1;

$b = $a; ? // $a 與 $b 合租, is_ref = 0, refcount = 2;

$va = "b"; // $va 獨居, is_ref = 0, refcount = 1;

$vb = $va; // $va 和 $vb 合租, is_ref = 0, refcount = 2;

$a = $va; ?// $a是單身,$va也是單身,因此 $a 搬去與 $va 同居,現在$a,$va,$vb三人同居

賦值后:

$a: is_ref = 0, refcount = 3, string = "xyz"

$b: is_ref = 0, refcount = 1, string = "qwe"

$va: is_ref = 0, refcount = 3, string "xyz"

$vb: is_ref = 0, refcount = 3, string "xyz"

情景二:

$a = "a"; ?// $a 獨居, is_ref = 0, refcount = 1;

$b = &$a; ? // $a 與 $b 結婚, is_ref = 1, refcount = 2;

$va = "b"; // $va 獨居, is_ref = 0, refcount = 1;

$vb = $va; // $va 和 $vb 合租, is_ref = 0, refcount = 2;

$a = $va; ?// $a是已婚, $a 不能隨便單獨搬出去,賦值會使$va的值拷貝給$a,其他關系不變

$a: is_ref = 1, refcount = 2, string = "xyz"

$b: is_ref = 1, refcount = 2, string = "xyz"

$va: is_ref = 0, refcount = 2, string "xyz"

$vb: is_ref = 0, refcount = 2, string "xyz"

情景三:

$a = "a"; ?// $a 獨居, is_ref = 0, refcount = 1;

$b = &$a; ? // $a 與 $b 結婚, is_ref = 1, refcount = 2;

$va = "b"; // $va 獨居, is_ref = 0, refcount = 1;

$vb = &$va; // $va 和 $vb 結婚, is_ref = 1, refcount = 2;

$a = $va; ?// $a是已婚, 與情景二相同,值拷貝,關系不變

賦值后:

$a: is_ref = 1, refcount = 2, string = "xyz"

$b: is_ref = 1, refcount = 2, string = "xyz"

$va: is_ref = 1, refcount = 2, string "xyz"

$vb: is_ref = 1, refcount = 2, string "xyz"

情景四:

$a = "qwe"; // $a 獨居, is_ref = 0, refcount = 1;

$b = $a; // $a 與 $b 同居, is_ref = 0, refcount = 2;

$va = "xyz"; // $va 獨居, is_ref = 0, refcount = 1;

$vb = &$va; // $va 和 $vb 結婚, is_ref = 1, refcount = 2;

$a = $va; // $a 想與 $va同居(而非結婚),但是$va已婚的,因此 $a只能從$b那里搬出來,重新分配個房子,值與$va一樣(術語叫:變量分離);$va和$vb關系不變

賦值后:

$a: is_ref = 0, refcount = 1, string = "xyz"

$b: is_ref = 0, refcount = 1, string = "qwe"

$va: is_ref = 1, refcount = 2, string "xyz"

$vb: is_ref = 1, refcount = 2, string "xyz"

情景五:

$a = "qwe"; // $a 獨居, is_ref = 0, refcount = 1;

$b = $a; // $a 與 $b 同居, is_ref = 0, refcount = 2;

$va = "xyz"; // $va 獨居, is_ref = 0, refcount = 1;

$vb = $va; // $va 和 $vb 同居, is_ref = 0, refcount = 2;

$a = &$va; // $a 想與 $va結婚,現在$a 和 $va 都是單身但是都有室友了,因此他們各自從原來的地方搬出來,然后分個新房子,值與$va原來的一樣

賦值后:

$a: is_ref = 1, refcount = 2, string = "xyz"

$b: is_ref = 0, refcount = 1, string = "qwe"

$va: is_ref = 1, refcount = 2, string "xyz"

$vb: is_ref = 0, refcount = 1, string "xyz"

情景六:

$a = "qwe"; // $a 獨居, is_ref = 0, refcount = 1;

$b = $a; // $a 與 $b 同居, is_ref = 0, refcount = 2;

$va = "xyz"; // $va 獨居, is_ref = 0, refcount = 1;

$vb = &$va; // $va 和 $vb 結婚, is_ref = 1, refcount = 2;

$a = &$va; // $a 想與 $va 結婚,但是 $va 是已婚的,而 $a 是單身,因此 $a 搬過去和 $va 住,$va 現在有兩個配偶:$vb 和 $a

賦值后:

$a: is_ref = 1, refcount = 3, string = "xyz"

$b: is_ref = 0, refcount = 1, string = "qwe"

$va: is_ref = 1, refcount = 3, string "xyz"

$vb: is_ref = 1, refcount = 3, string "xyz"

情景七:

$a = "qwe"; // $a 獨居, is_ref = 0, refcount = 1;

$b = &$a; // $a 與 $b 結婚, is_ref = 1, refcount = 2;

$va = "xyz"; // $va 獨居, is_ref = 0, refcount = 1;

$vb = $va; // $va 和 $vb 同居, is_ref = 0, refcount = 2;

$a = &$va; // $a 想與 $va 結婚,但是 $a 是已婚的,$va 是單身, 解決辦法是 $a 離婚后和 $va 結婚,同時 $va 從與 $vb合租的地方搬出來

賦值后:

$a: is_ref = 1, refcount = 2, string = "xyz"

$b: is_ref = 0, refcount = 1, string = "qwe"

$va: is_ref = 1, refcount = 2, string "xyz"

$vb: is_ref = 0, refcount = 1, string "xyz"

情景八:

$a = "qwe"; // $a 獨居, is_ref = 0, refcount = 1;

$b = &$a; // $a 與 $b 結婚, is_ref = 1, refcount = 2;

$va = "xyz"; // $va 獨居, is_ref = 0, refcount = 1;

$vb = &$va; // $va 和 $vb 結婚, is_ref = 1, refcount = 2;

$a = &$va; // $a 想與 $va 結婚,但是 $a和$va都是已婚的,誰離婚?$a!,因為是$a主動想和$va結婚,

// $a 離婚后$va住一起,$va 現在有兩個配偶:$vb 和 $a

賦值后:

$a: is_ref = 1, refcount = 3, string = "xyz"

$b: is_ref = 0, refcount = 1, string = "qwe"

$va: is_ref = 1, refcount = 3, string "xyz"

$vb: is_ref = 1, refcount = 3, string "xyz"

以上分析了簡單變量賦值的各種情形,不包括自引用的情況。概況來講:

簡單賦值 就是同居,需考察等號左側變量的is_ref(即是否已婚),若 is_ref = 1,則值拷貝,否則考慮左側便令,能否在不另外分配內存的情形下,與右側變量共用同一存儲空間(同居),此時要考察右側是否是已婚,若是,則不能同居,變量分離,若右側變量也是單身,則直接共用同一內存,所有同居者都遵循 COW(寫時拷貝)的原則。

引用賦值 就是結合, 需先考察右側變量的引用情況, 若 is_ref = 1,則直接 refcount ++, 出現多人結合的情況, 若右側是非引用的(is_ref = 0),那還需考察右側是否是獨居,若是獨居,則 左右兩個變量共用右側變量空間,否則右側變量從原來的地方分離出來和左側開辟新空間。 只要是引用賦值,那么左側變量總是要與之前結合的或共用的變量進行分離。

http://www.bkjia.com/PHPjc/875473.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/875473.htmlTechArticlePHP 引用計數器 通俗版解釋 概述 最近看PHP中的引用計數器部分,首先被各種繞暈,然后通過看博客和分析后,總結了一個比較通俗的解釋,...

總結

以上是生活随笔為你收集整理的php引用计数器,PHP 引用计数器 通俗版解释_PHP教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品1区2区 | 日韩sese| 亚洲精品视频观看 | 操女人视频网站 | 91久久精品国产91久久 | 国产色婷婷 | 日韩国产免费 | 久久精品国产欧美亚洲人人爽 | 日韩精品一线二线三线 | 日韩欧美精品一区 | 国产在线综合网 | 在线国产毛片 | 我们俩电影网mp4动漫官网 | 久久精品免费在线 | 喷水在线观看 | 粉豆av| 国产成人精品一区二三区四区五区 | 成人性生活毛片 | 看日本黄色录像 | 久久一精品 | 精品一区二区三区免费看 | 免费观看美女裸体网站 | 日本黄色三级网站 | 国产区在线 | 99国产精品久久久久久久久久久 | 尤物国产在线 | 国产真实交换夫妇视频 | 欧美一区2区三区4区公司 | 国产区免费 | 国产高清视频在线免费观看 | 脱裤吧导航 | 不良视频在线观看 | 热九九精品 | 黄色片亚洲 | www.4hu95.com四虎| 婷婷色吧 | 亚洲另类av | 少妇被中出 | 日本乱码一区二区 | 一道本av | 人人爽久久涩噜噜噜网站 | 国产精品久久久久久久妇 | 国产私人影院 | 亚洲天堂美女 | www.99视频 | 免费污污视频在线观看 | 中文字幕色哟哟 | 婷婷色综合网 | 大香伊人中文字幕精品 | 久青草资源福利视频 | 精品人妻一区二区三区麻豆91 | 国产乱强伦一区二区三区 | 欧美一区二区三区久久综合 | 国产自产| a级黄色网 | 香蕉91视频 | 欧美αv| 色av综合网 | 久久久久国产 | 成人精品视频一区 | 成人免费网站www网站高清 | 亚洲一级二级片 | 国产真人无遮挡作爱免费视频 | 麻豆精品a∨在线观看 | 毛片视频播放 | 亚洲人xxx日本人18 | 一级大片免费观看 | 亚洲少妇一区 | 国产字幕侵犯亲女 | 精品国产av色一区二区深夜久久 | 国产 欧美 自拍 | free性欧美hd另类 | 一级丰满大乳hd高清 | 亚洲色图日韩精品 | 国产一区二区三区四区视频 | 中文字幕手机在线视频 | 日本成人免费网站 | 亚洲国产精品成人无码区 | 日韩少妇一区二区 | 日本午夜网 | 成人在线视频观看 | 免费看裸体网站视频 | 亚洲一区在线免费观看 | 老司机午夜影院 | 免费一区二区三区四区 | av番号网 | 男人久久天堂 | 猛1被调教成公厕尿便失禁网站 | 亚洲三级欧美 | 天天色天 | 又黄又色又爽 | 国产精品一卡二卡在线观看 | 福利在线国产 | 伦理自拍 | 国产又粗又长又大 | 国产精品一区二区人人爽 | 天啪 | www.天天射| 午夜精品一区二区三区免费视频 |