詳解PHP變量傳值賦值和引用賦值變量銷(xiāo)毀
本文實(shí)例為大家分享了PHP變量傳值賦值和引用賦值變量銷(xiāo)毀的具體代碼,供大家參考,具體內(nèi)容如下
<?php $a = 100; $b = 200; var_dump($a,$b); //int(100) int(200) ?>
php中,上面的代碼,變量是怎么存放的呢?

上面的代碼變動(dòng)下,將變量b賦值給變量a,會(huì)發(fā)生什么?
<?php $a = 100; $b = 200; $a = $b;/*多了這個(gè)*/ var_dump($a,$b); //int(200) int(200) ?>
問(wèn)題來(lái)了,$a = $b,那么是將變量a的指針指向了變量b指針?biāo)赶虻奈恢??還是變量a指向的位置的值變了?

引用賦值和上面?zhèn)髦蒂x值不同,引用賦值是兩個(gè)變量指向一個(gè)地方,一旦這樣,一改俱改。
怎么引用賦值呢?變量名前加&即可,
$a = &$b;
這樣賦予變量a的就不僅僅是變量b的值,而是變量b的地址,變量a和變量b共同指向一個(gè)地址。
<?php $a = 100; $b = 200; $a = &$b; var_dump($a,$b); //int(200) int(200) /*變量b引用賦值給變量a后,ab指向同一個(gè)地址,將會(huì)一改俱改,如下:*/ $a =500; var_dump($a,$b);//int(500) int(500) 一改俱改 $b = 700; var_dump($a,$b);//int(700) int(700) 一改俱改 ?>

<?php /*理解下面的話(huà)*/ $a = 100; //變量a賦值int 100 ,100是基礎(chǔ)數(shù)據(jù)類(lèi)型,不是變量,是存在變量指向位置的 $a = $b; //變量b的值 賦值 給變量a,變量a,b各有各的指向,執(zhí)行之后,各是各的。 $a = &$b; //變量b的值的地址 賦值給變量 a ,變量a,b共用一個(gè)地址哦!一改俱改! ?>
<?php /* php中unset()是用來(lái)銷(xiāo)毀變量的,但很多時(shí)候,unset()只把變量給銷(xiāo)毀了, 內(nèi)存中存放的該變量的值仍然沒(méi)有銷(xiāo)毀,也就是沒(méi)能達(dá)到我們想要的釋放內(nèi)存的效果。 這里可以用 變量=null 的方法來(lái)釋放其內(nèi)存 unset也會(huì)釋放內(nèi)存的情況 1. 在變量值所占空間超過(guò)255字節(jié)長(zhǎng)的時(shí)候,unset(變量)才會(huì)釋放內(nèi)存 2. 只有當(dāng)指向該值的所有變量都被銷(xiāo)毀后,地址才會(huì)被釋放(比如$a,$b都指向該值,僅僅unset($a);是不釋放的,$b還是正常存在的)(也要執(zhí)行1的判斷) */ $a = 200; $b = &$a; unset($a); var_dump($a,$b); //NULL int(100) ?>
上面的代碼,執(zhí)行到unset($a)時(shí)候,就是將變量a的指向斷開(kāi),同時(shí)將變量a扔出花名冊(cè),從下圖可以看出,對(duì)變量b是沒(méi)有影響的。
但是,如果用$a = null;這種方式銷(xiāo)毀變量時(shí),將會(huì)有如下影響:
<?php $a = 100; $b = &$a; $a = null; var_dump($a,$b); //NULL NULL ?>
這種方式,釋放了內(nèi)存,但是共用一個(gè)地址的另一個(gè)變量也受到了影響。
看看這兩種方式在數(shù)組上的應(yīng)用:
<?php
$aaa = array(
'a'=>1,
'b'=>2
);
unset($aaa['a']);
print_r($aaa); //Array ( [b] => 2 ) ,用unset,數(shù)組中這一項(xiàng)不存在了
$bbb = array(
'a'=>1,
'b'=>2
);
$bbb['a'] = null;
print_r($bbb); //Array ( [a] => [b] => 2 ) ,用 = null,數(shù)組中這一項(xiàng)還存在,只是為空了
?>
以上所述是小編給大家介紹的PHP變量傳值賦值和引用賦值變量銷(xiāo)毀詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
PHP PDOStatement:bindParam插入數(shù)據(jù)錯(cuò)誤問(wèn)題分析
PHP PDOStatement:bindParam插入數(shù)據(jù)錯(cuò)誤問(wèn)題分析,開(kāi)發(fā)中一定要注意2013-11-11
檢查url鏈接是否已經(jīng)有參數(shù)的php代碼 添加 ? 或 &
有時(shí)候我們需要檢查 URL 鏈接是否已經(jīng)有參數(shù),然后根據(jù)需要判斷是添加 ? 還是添加 & 在結(jié)尾,這只是一個(gè)很小的技巧,但是在做分頁(yè)或者頁(yè)面跳轉(zhuǎn)時(shí)還是有些用處的。2010-02-02
php數(shù)據(jù)庫(kù)操作model類(lèi)(使用__call方法)
這篇文章主要介紹了php數(shù)據(jù)庫(kù)操作model類(lèi),使用__call方法實(shí)現(xiàn)了數(shù)據(jù)的查詢(xún)功能,需要的朋友可以參考下2016-11-11
PHP常量使用的幾個(gè)需要注意的地方(謹(jǐn)慎使用PHP中的常量)
常量包含數(shù)字字母字符和下劃線(xiàn),數(shù)字允許作為常量名。 常量名的所有字母必須大寫(xiě)。類(lèi)常量必須通過(guò) const 定義為類(lèi)的成員,強(qiáng)烈不鼓勵(lì)使用 define 定義的全局常量2014-09-09
phpstudy無(wú)法啟動(dòng)MySQL服務(wù)的解決方法
個(gè)人比較懶,所以想到用phpstudy這個(gè)軟件進(jìn)行控制,但這個(gè)時(shí)候問(wèn)題出現(xiàn)了:在下載phpstudy后想要啟動(dòng)MySQL服務(wù),但是總是無(wú)法啟動(dòng),所以本文給大家介紹了如何解決phpstudy無(wú)法啟動(dòng)MySQL服務(wù)的問(wèn)題,需要的朋友可以參考下2024-06-06

