日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > PHP > 正文

php變量的引用賦值與傳值賦值的詳細介紹(代碼

2020-03-24 18:57:25
字體:
來源:轉載
供稿:網友
本篇文章給大家帶來的內容是關于html' target='_blank'>php變量的引用賦值與傳值賦值的詳細介紹(代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

一、使用 memory_get_usage() 查看PHP內存使用量1. 傳值賦值
// 定義一個變量$a = range(0, 10000);var_dump(memory_get_usage());// 定義變量b,將a變量的值賦值給b$b = $a;var_dump(memory_get_usage());// 對a進行修改// COW: Copy-On-Write$a = range(0, 10000);var_dump(memory_get_usage());

輸出結果:

int(989768)int(989856)int(1855608)
定義一個變量 $a = range(0, 10000);

3318694436-5b851f10a5d62_articlex.jpg

$b = $a;

4080624257-5b851f10ae86f_articlex.jpg

對a進行修改 $a = range(0, 10000);

1485385066-5b851f10b9b7b_articlex.jpg

PHP寫時復制機制(Copy-on-Write,也縮寫為COW)

顧名思義,就是在寫入時才真正復制一份內存進行修改。
COW最早應用在Unix系統中對線程與內存使用的優化,后面廣泛的被使用在各種編程語言中,如C++的STL等。
在PHP內核中,COW也是主要的內存優化手段。
在通過變量賦值的方式賦值給變量時,不會申請新內存來存放新變量的值,而是簡單的通過一個計數器來共用內存。只有在其中的一個引用指向變量的值發生變化時,才申請新空間來保存值內容,以減少對內存的占用。
在很多場景下PHP都使用COW進行內存的優化。比如:變量的多次賦值、函數參數傳遞,并在函數體內修改實參等。

2. 引用賦值
// 定義一個變量$a = range(0, 10000);var_dump(memory_get_usage());// 定義變量b,將a變量的引用賦給b$b = var_dump(memory_get_usage());// 對a進行修改$a = range(0, 10000);var_dump(memory_get_usage());

輸出結果:

int(989760)int(989848)int(989840)
定義一個變量 $a = range(0, 10000);

2340912772-5b851f108ae5b_articlex.jpg

定義變量b,將a變量的引用賦給b $b =

3774805543-5b851f10a5b60_articlex.jpg

對a進行修改 $a = range(0, 10000);

679713656-5b851f105a29e_articlex.jpg

二、使用 xdebug_debug_zval() 查看變量的引用情況

xdebug_debug_zval() 用于顯示變量的信息。需要安裝xdebug擴展。

1. 傳值賦值
$a = 1;xdebug_debug_zval( a // 定義變量b,把a的值賦值給b$b = $a;xdebug_debug_zval( a xdebug_debug_zval( b // a進行寫操作$a = 2;xdebug_debug_zval( a xdebug_debug_zval( b 

輸出結果:

a: (refcount=1, is_ref=0)=1a: (refcount=2, is_ref=0)=1b: (refcount=2, is_ref=0)=1a: (refcount=1, is_ref=0)=2b: (refcount=1, is_ref=0)=1
定義變量 $a = 1;
$a = 1;xdebug_debug_zval( a 

輸出

a: (refcount=1, is_ref=0)=1

refcount=1 表示該變量指向的內存地址的引用個數變為1
is_ref=0 表示該變量不是引用

1547227858-5b851f1059ea9_articlex.jpg

定義變量 $b ,把 $a 的值賦給 $b, $b = $a;
$b = $a;xdebug_debug_zval( a xdebug_debug_zval( b 

輸出

a: (refcount=2, is_ref=0)=1b: (refcount=2, is_ref=0)=1

refcount=2 表示該變量指向的內存地址的引用個數變為2
is_ref=0 表示該變量不是引用

448181073-5b851f103fd97_articlex.jpg

對變量 $a 進行寫操作 $a = 2;
$a = 2;xdebug_debug_zval( a xdebug_debug_zval( b 

輸出

a: (refcount=1, is_ref=0)=2b: (refcount=1, is_ref=0)=1

因為COW機制,對變量 $a 進行寫操作時,會為變量 $a 新分配一塊內存空間,用于存儲變量 $a 的值。
此時 $a 和 $b 指向的內存地址的引用個數都變為1。

1418161517-5b851f1059c5b_articlex.jpg

2. 引用賦值
$a = 1;xdebug_debug_zval( a // 定義變量b,把a的引用賦給b$b = xdebug_debug_zval( a xdebug_debug_zval( b // a進行寫操作$a = 2;xdebug_debug_zval( a xdebug_debug_zval( b 
a: (refcount=1, is_ref=0)=1a: (refcount=2, is_ref=1)=1b: (refcount=2, is_ref=1)=1a: (refcount=2, is_ref=1)=2b: (refcount=2, is_ref=1)=2
定義變量 $a = 1;
$a = 1;xdebug_debug_zval( a 

輸出

a: (refcount=1, is_ref=0)=1

refcount=1 表示該變量指向的內存地址的引用個數變為1
is_ref=0 表示該變量不是引用

604317911-5b851f103610d_articlex.jpg

定義變量 $b ,把 $a 的引用賦給 $b, $b =
$b = xdebug_debug_zval( a xdebug_debug_zval( b 

輸出

a: (refcount=2, is_ref=1)=1b: (refcount=2, is_ref=1)=1

refcount=2 表示該變量指向的內存地址的引用個數變為2
is_ref=1 表示該變量是引用

442598603-5b851f0fc4cdd_articlex.jpg

對變量 $a 進行寫操作 $a = 2;
$a = 2;xdebug_debug_zval( a xdebug_debug_zval( b 

輸出

a: (refcount=2, is_ref=1)=2b: (refcount=2, is_ref=1)=2

因為變量 $a 和變量 $b 指向相同的內存地址,其實引用。
對變量 $a 進行寫操作時,會直接修改指向的內存空間的值,因此變量 $b 的值會跟著一起改變。

184090893-5b851f0fca6b2_articlex.jpg

三、當變量時引用時,unset()只會取消引用,不會銷毀內存空間
$a = 1;$b = // unset 只會取消引用,不會銷毀內存空間unset($b);echo $a;

輸出

1
定義變量 $a ,并將 $a 的引用賦給變量 $b
$a = 1;$b = 

2282715878-5b851f0fc3d75_articlex.jpg

銷毀 $b
unset($b);

4009950758-5b851f0fc8cdc_articlex.jpg

輸出 $a

雖然銷毀的 $b,但是 $a 的引用和內存空間依舊存在。

echo $a;

輸出

1
四、php中對象本身就是引用賦值
class Person public $age = 1;$p1 = new Person;xdebug_debug_zval( p1 $p2 = $p1;xdebug_debug_zval( p1 xdebug_debug_zval( p2 $p2- age = 2;xdebug_debug_zval( p1 xdebug_debug_zval( p2 
p1: (refcount=1, is_ref=0)=class Person { public $age = (refcount=2, is_ref=0)=1 }p1: (refcount=2, is_ref=0)=class Person { public $age = (refcount=2, is_ref=0)=1 }p2: (refcount=2, is_ref=0)=class Person { public $age = (refcount=2, is_ref=0)=1 }p1: (refcount=2, is_ref=0)=class Person { public $age = (refcount=1, is_ref=0)=2 }p2: (refcount=2, is_ref=0)=class Person { public $age = (refcount=1, is_ref=0)=2 }
實例化對象 $p1 = new Person;
$p1 = new Person;xdebug_debug_zval( p1 

輸出

p1: (refcount=1, is_ref=0)=class Person { public $age = (refcount=2, is_ref=0)=1 }

refcount=1 表示該變量指向的內存地址的引用個數變為1
is_ref=0 表示該變量不是引用

把 $p1 賦給 $p2
$p2 = $p1;xdebug_debug_zval( p1 xdebug_debug_zval( p2 

輸出

p1: (refcount=2, is_ref=0)=class Person { public $age = (refcount=2, is_ref=0)=1 }p2: (refcount=2, is_ref=0)=class Person { public $age = (refcount=2, is_ref=0)=1 }

refcount=2 表示該變量指向的內存地址的引用個數變為2

1112636063-5b851f0fcaf64_articlex.jpg

對 $p2 中的屬性 age 進行寫操作
$p2- age = 2;xdebug_debug_zval( p1 xdebug_debug_zval( p2 

輸出

p1: (refcount=2, is_ref=0)=class Person { public $age = (refcount=1, is_ref=0)=2 }p2: (refcount=2, is_ref=0)=class Person { public $age = (refcount=1, is_ref=0)=2 }

因為php中對象本身就是引用賦值。對 $p2 中的屬性 age 進行寫操作時,會直接修改指向的內存空間的值,因此變量 $p1 的 age 屬性的值會跟著一起改變。

五、實戰例題分析
/** * 寫出如下程序的輸出結果 * $d = [ a , b , c  * foreach($d as $k = $v) * $v = $d[$k]; * 程序運行時,每一次循環結束后變量 $d 的值是什么?請解釋。 * 程序執行完成后,變量 $d 的值是什么?請解釋。 */
1. 第一次循環推算出進入 foreach 時 $v、$d[$k] 的值
$k = 0$v = a $d[$k] = $d[0] = a 

此時,$v 和 $d[0] 在內存中分別開辟了一塊空間

![$v 和 $d[0] 在內存中分別開辟了一塊空間](http://md.ws65535.top/xsj/201...

$v = $d[0] 改變了 $v 指向的內存地址
$v = $d[0]

![$v = $d[0] 改變了 $val 指向的內存地址](http://md.ws65535.top/xsj/201...

第一次循環后 $d 的值:
[ a , b , c ]
2. 第二次循環進入 foreach 時 $v 被賦值為 b ,此時$v指向的內存地址與 $d[0] 相同,且為引用,因此 $d[0] 的值被修改為 b

$v = b = $d[0] = b

![$v = ‘b’ = $d[0] = ‘b’](http://md.ws65535.top/xsj/201...

推算出進入 foreach 時 $d[$k] 的值
$k = 1$d[$k] = $d[1] = b 

![$d[2] = ‘b’](http://md.ws65535.top/xsj/201...

$v = $d[1] 改變了 $v 指向的內存地址
$v = $d[1]

![$v = $d[1]](http://md.ws65535.top/xsj/201...

第二次循環后 $d 的值
[ b , b , c ]
3. 第三次循環進入 foreach 時 $v 被賦值為 c ,此時$v指向的內存地址與 $d[1] 相同,且為引用,因此 $d[1] 的值被修改為 c

$v = c = $d[1] = c

![$v = ‘c’ = $d[1] = ‘c’](http://md.ws65535.top/xsj/201...

推算出進入 foreach 時 $d[$k] 的值
$k = 2$d[2] = c 

![$d[2] = ‘c’](http://md.ws65535.top/xsj/201...

$v = $d[2] 改變了 $v 指向的內存地址
$v = $d[2]

![$v = $d[2]](http://md.ws65535.top/xsj/201...

第三次循環后 $d 的值
[ b , c , c ]
4. 實測
$d = [ a , b , c foreach ($d as $k= $v) $v = $d[$k]; print_r($d);print_r($d);
輸出:
Array [0] = a [1] = b [2] = cArray [0] = b [1] = b [2] = cArray [0] = b [1] = c [2] = cArray [0] = b [1] = c [2] = c)

相關推薦:

php 傳值賦值與引用賦值的區別_PHP教程

PHP變量賦值、代入給JavaScript中的變量,賦值javascript

以上就是php變量的引用賦值與傳值賦值的詳細介紹(代碼)的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产羞羞视频在线播放| 日韩欧美综合| 国产在线播放一区二区| 视频一区二区中文字幕| 一区二区视频在线| 美国av一区二区| 中文字幕在线官网| 日韩欧美久久久| 欧美成人一区二区| 亚洲乱码中文字幕| 欧美日韩精品久久久| 在线视频国内一区二区| 国产日韩av一区| 亚洲美女视频一区| 日韩欧美在线精品| 欧美va亚洲va日韩∨a综合色| 日韩精品欧美在线| 欧美 日韩 国产在线观看| 欧美另类久久久品| 又黄又www的网站| 国产精品一区二三区| 国产视频一区三区| 日韩中文欧美| 色综合天天综合网国产成人综合天| 国产区视频在线观看| 日韩欧美中文字幕视频| 91久久精品视频| 中文字幕 日韩 欧美| 激情久久99| 欧美一级免费看| 欧美亚洲国产激情| 久久精品免费在线观看| 刘玥91精选国产在线观看| 不卡一二三区| 亚洲高清视频一区| 国产黄色片中文字幕| 欧美高清一级片在线| 日韩欧美国产黄色| 日韩在线欧美| 日韩欧美不卡视频| 一区二区中文字幕在线| 欧美日韩在线精品成人综合网| 国产偷国产偷亚洲清高网站| 精品国产91| 国产第一页在线播放| 精品国产1区2区3区| 国产主播中文字幕| 一区精品在线播放| 成片免费观看| 一本一道综合狠狠老| 中文字幕在线视频第一页| 精品国产999| 国产 欧美 日韩 在线| 国产又粗又猛又爽又黄91精品| 国产黄色在线观看| 中文字幕精品视频在线| 国产成人精品免费网站| 精品播放一区二区| 日韩午夜黄色| 欧美日韩亚洲不卡| 日韩精品在线视频| 中文字幕亚洲二区| 久久99久久久久| 一区二区三区中文字幕在线观看| 亚洲成在线观看| 免费在线视频一级不卡| 久久婷婷国产| 免费日韩精品中文字幕视频在线| 久久91精品国产91久久小草| 天堂中文在线视频| 日韩三级一区| 一区二区三区免费看视频 | 欧美日韩高清在线一区| 日韩一级二级三级| 中文字幕第一页在线播放| 久艹在线视频| 亚洲第一页中文字幕| 精品色蜜蜜精品视频在线观看| 亚洲欧美中文字幕| 狠狠色噜噜狠狠狠狠97| 国产 中文 字幕 日韩 在线| 蜜桃视频一日韩欧美专区| 国产福利精品导航| 精品午夜av| 99综合精品久久| 99视频在线看| 国产拍揄自揄精品视频麻豆| 精品欧美日韩精品| www.eeuss影院| 92久久精品| 国产午夜精品视频| 91精品国产91久久久久久青草| 日韩av在线中文字幕| 91精品日本| a天堂中文在线官网在线| 午夜一区二区三区视频| 日韩在线三区| 欧美1区免费| 内射国产内射夫妻免费频道| 日韩欧美国产一二三区| 欧美日韩一二三| 日韩三级在线播放| 亚洲免费中文字幕| 国产 日韩 欧美 综合| 亚洲国产福利| 人成免费在线视频| 二区三区中文字幕| 亚洲综合中文字幕在线| av中文资源在线| 精品久久香蕉国产线看观看gif| 欧美日韩视频网站| 午夜精品一区二区三区视频免费看| 亚洲va中文字幕| 999精品在线| 精品国产乱码久久久久久牛牛| 精品一二线国产| 91精品国产欧美日韩| 日韩欧美中文字幕在线观看| 97caopor国产在线视频| 精品对白一区国产伦| 日韩欧中文字幕| 精品久久久视频| 日韩国产在线不卡视频| aaa大片在线观看| 一区二区国产在线| 亚洲国产欧美日韩精品| 日韩精品在线私人| 亚州黄色一级| 日韩精品视频在线播放| 国产精久久久久| 中文字幕精品国产| 精品在线网站观看| 国产成人精品三级| 日韩在线三区| 亚洲精品中文字幕乱码三区不卡| 日韩欧美国产成人精品免费| 精品一二三四| 色综合婷婷久久| 在线视频观看日韩| 日韩欧美色综合| 欧美久久一二三四区| 国产免费播放一区二区| 日韩欧美在线精品| 欧美三级视频在线| 欧美激情视频一区二区三区在线播放| 欧美日韩精品是欧美日韩精品| 日韩在线视频网| 欧美日韩在线观看成人| 亚洲女人天堂色在线7777| 精品成人久久av| 国产无套粉嫩白浆在线2022年 | 91精品在线看V| 精品久久久精品| 最近中文字幕在线中文高清版| 日韩视频精品在线观看| 国产网站欧美日韩免费精品在线观看 | 欧美日韩成人一区二区| 国产在线导航| 欧美日韩国产综合视频在线观看| 国产一级视频| 欧美日韩综合在线免费观看| 激情婷婷亚洲| 中文在线视频观看| 日韩亚洲欧美中文在线| 日韩视频第二页| 999精品视频在线观看播放| 亚洲va韩国va欧美va精品| 久久99精品国产| 色偷偷一区二区三区| 日韩中文字幕在线观看视频| 精品视频999| 亚洲第一页中文字幕| 欧美一级久久| 亚洲人线精品午夜| 日韩免费精品| 国产色综合网| 欧美在线观看视频一区| 99国内精品| 国产小视频在线| 中文字幕在线视频网| 免费看日韩精品| 日韩欧美一卡二卡| 黄色一区二区视频| 亚洲免费在线观看av| 1024国产在线| 亚洲综合在线不卡| 欧美日韩在线观看成人| 日本视频久久久| 日本不卡视频一区| 中文国产字幕在线观看| 日本a级黄色| 精品乱人伦一区二区三区| 日韩色在线观看| 欧美日韩99| 白嫩少妇丰满一区二区| 天天综合天天综合| av中文网站| 中文字幕亚洲区| av午夜在线| 午夜伊人狠狠久久| 国产99在线 | 亚洲| 最近高清中文在线字幕在线观看1| 亚洲男人在线| 欧美日韩综合在线观看| 最近免费中文字幕在线第一页| 日韩精品在线视频| 91精品国产免费久久综合| 精品在线91| 久久精品一级爱片| 欧美日韩免费高清| 国产一区成人| 日韩欧美成人一区二区三区| 日韩三级高清在线| 中文字幕 亚洲视频| 日韩欧美在线字幕 | 午夜少妇久久久久久久久| 亚洲一级特黄| 国产高清在线观看| 日本精品国语自产拍在线观看| 91精品国产91久久久久久三级| 欧美日韩国产在线观看| 国产极品嫩模在线视频一区| 日韩一级免费在线观看| 亚洲三级免费看| 国产一二三四| 久草亚洲一区| 亚洲成a人片在线www| 日韩欧美中文第一页| 中文字幕欧美在线| 欧美日韩中文字幕在线视频| 日韩欧美国产亚洲| 午夜少妇久久久久久久久| 精品成a人在线观看| 亚洲一区中文在线| 精品日韩欧美在线| 91精品国产91久久久久久青草| 国产123在线| 日韩你懂的电影在线观看| 92久久精品| 精品久久久精品| 国产成人综合精品| 欧美日韩综合色| 国产高清视频一区二区| 久久在线91| 日韩不卡在线播放| 影音先锋中文字幕在线观看| 日本不卡免费高清视频| 欧美日韩中文在线| 国产伦精品免费视频| 日韩av综合在线观看| av免费观看国产| 亚洲成av人综合在线观看| 国产欧美日韩在线| 日韩不卡高清视频| 欧美日韩99| 欧美日韩综合不卡| 一区二区三区精品在线| 日韩三级在线播放| 日韩在线不卡一区| 国精品产品一区| 国产三级第一页| 亚洲第一视频| 日本不卡免费高清视频| 不卡一二三区| 久久久精品欧美| 日韩不卡一区二区| 欧美日韩国产第一页| 91精品国产自产观看在线| 日韩中文在线中文网三级| 成人ww免费完整版在线观看| 精品无人国产偷自产在线| 日本一欧美一欧美一亚洲视频| 91九色在线看| 亚洲图片小说综合| 91精品国产综合久久久久久漫画 | 中文字幕精品一区二| 在线视频你懂得一区| 久久精品人妻一区二区三区| 中文字幕在线日韩| 日韩视频在线一区二区三区| 欧美日韩三级在线观看| 欧美日韩高清一区二区不卡| 免费看日韩精品| 在线看av的网址| 精品国产免费观看一区| 欧美 日韩 综合| 国产在线观看精品| 欧美日韩精品免费在线观看视频| 日韩精品资源二区在线| 中文字幕在线视频网| 免费在线播放av| 国产欧美在线观看| 亚洲综合视频一区| 91精品国产高清| 欧美日韩高清一区二区不卡| 久久久久久99精品| 色偷偷一区二区三区| 欧美日韩国产在线| 深夜福利一区二区| 中文字幕亚洲高清| 中文字幕 日韩 欧美| 中文字幕第一页在线播放| 国产黄色在线播放| 精品网站999| 欧美日韩国产在线看| 日韩在线视频免费观看| 黄色一级大片在线免费看国产一| 中文字幕亚洲高清| 亚洲羞羞网站| 一二三区精品福利视频| 国产一区免费视频| 九七久久人人| 欧美日韩精品三区| 一级国产黄色片| 蜜桃精品在线| 欧美日韩在线第一页| 国产一级在线免费观看| 国产一卡2卡3卡4卡网站免费| 中文字幕在线视频久| 一区视频在线播放| aaa免费看大片| 一区二区中文视频| 99精品人妻国产毛片| а√天堂8资源中文在线| 九九视频精品免费| av免费在线播放| 午夜伦欧美伦电影理论片| 99久久精品国产亚洲| 日韩精品中文在线观看| 国产专区中文字幕| 日韩欧美中文视频| 日韩国产成人| 欧美日韩亚洲综合| 91精品国产91久久久久| 日韩欧美综合| 精品国产综合久久| 中文字幕在线观看亚洲| 欧美国产综合在线V| 在线视频国产三级| 日韩视频一区二区在线观看| 99这里有精品视频| 国产欧美综合视频| 亚洲一区在线视频观看| 亚洲国产福利| 国产在线高潮| 二区三区不卡不卡视频| 在线日韩中文| 亚洲成年网站在线观看| 国产黄色在线免费观看| 亚洲欧美中文字幕在线观看| 久久中文免费视频| 亚洲综合视频一区| 日韩欧美中文字幕精品| av免费网站在线观看| 中文字幕狠狠干| 在线视频第一页| 欧美日韩在线视频一区| 日韩精品在线视频| 国产中文在线| 亚洲国产无线乱码在线观看| 91精品在线免费| 日韩欧美亚洲国产| 日韩在线视频在线观看| 欧美日韩成人一区二区| 91精品国产综合久久香蕉的特点| 色综合天天性综合| 中文欧美字幕免费| 在线观看一区日韩| 高清在线一区| 精品av中文字幕在线毛片| 亚洲欧美伊人| 国产永久免费高清在线观看| 中文字幕第一页在线播放| 在线一区二区三区精品| 韩日中文字幕第一页| 中文字幕在线观看国产| 国产在线视频一区二区| 91国内在线| 亚洲免费在线观看av| 亚洲欧洲日韩在线| 亚洲一区在线视频观看| 日韩中文在线视频| 91精品国产手机| 国产一级网站视频在线| 国产一级视频| 国产成人精品网址| 中文字幕在线观看视频www| 欧美在线日韩| 日韩欧美99| 91亚洲欧美| 国产欧美日韩综合精品| 精品在线网站观看| 国产在线观看黄色| 久久精品夜夜夜夜久久| 欧美日韩成人综合| 精品极品三级久久久久| 日本黄色一区二区三区| 中文字幕在线观看网址| 亚洲国产无线乱码在线观看| 精品国产99|