詳解PHP變數傳值賦值和引用賦值變數銷毀

2022-09-26 06:15:10 字數 2079 閱讀 7861

<?php $a = 100;

$b = 200;

var_dump($a,$b); //int(100) int(200)

?>

php中,上面的**,變數是怎麼存放的呢?

上面的**變動下,將變數b賦值給變數a,會發生什麼?

<?php $a = 100;

$b = 200;

$a = $b;/*多了這個*/

var_dump($a,$b); //int(200) int(200)

?>

問題來了,$a = $b,那麼是將變數a的指標指向了變數b指標所指向的位置?還是變數a指向的位置的值變了?

引用賦值和上面傳值賦值不同,引用賦值是兩個變數指向乙個地方,一旦這樣,一改俱改。

怎麼引用賦值呢?變數名前加&即可,

$a = &$b;

這樣賦予變數a的就不僅僅是變數b的值,而是變數b的位址,變數a和變數b共同指向乙個位址。

<?php $a = 100;

$b = 200;

$a = &$b;

var_dump($a,$b); //int(200) int(200)

/*變數b引用賦值給變數a後,ab指向同乙個位址,將會一改俱改,如下:*/

$a =500;

var_dump($a,$b);//int(500) int(500) 一改俱改

$b = 700;

var_dump($a,$b);//int(700) int(700) 一改俱改

?>

<?php /*理解下面的話*/

$a = 100;

//變數a賦值int 100 ,100是基礎資料型別,不是變數,是存在變數指向位置的

$a = $b;

//變數b的值 賦值 給變數a,變www.cppcns.com量a,b各有各的指向,執行之後,各是各的。

$a = &$b;

//變數b的值的位址 賦值給變數 a ,變數a,b共用乙個位址哦!一改俱改!

?>

<?php /*

php中unset()是用來銷毀變數的,但很多時候,unset()只把變數給銷毀了,

記憶體中存放的該變數的值仍然沒有銷毀,也就是沒能達到我們想要的釋放記憶體的效果。

這裡可以用 變數=null 的方法來釋放其記憶體

unset也會釋放記憶體的情況

1. 在變數值所佔空間超過255位元組長的時候,unset(變數)才會釋放記憶體

2. 只有當指向該值的所有變數都被銷毀後,位址才會被釋放(比如$a,$b都指向該值,僅僅unset($a);是不釋放的,$b還是正常存在的)(也要執行1的判斷)

*/ $a = 200;

$b = &$a;

unset($a);

var_dump($a,$b); //null int(100)

?>

上面的**,執行到unset($a)時候,就是將變數a的指向斷開,同時將變數a扔出花名冊,從下圖可以看出,對變數b是沒有影響的。

但是,如果用$a = null;這種方式銷毀變數時,將會有如下影響:

<?php $a = 100;

$b = &$a;

$a = null;

var_dump($a,$b); //null null

?>

這種方式,釋放了記憶體,但是共用乙個位址的另乙個變數也受到了影響。

看看這兩種方式在陣列上的應用:

<?php $aaa = array(

'a'=>1,

'b'=>2

);unset($aaa['a']);

print_r($aaa); //array 程式設計客棧( [b] => 2 ) ,用unset,陣列中這一項不存在了

$bbb = array(

'a'=>1,

'b'=>2

);$bbb['a'] = null;

print_r($bbb); //arr程式設計客棧ay ( [a] => [b] => 2 ) ,用 = null,陣列中這一項還存在,只是為空了

?>

本文標題: 詳解php變數傳值賦值和引用賦值變數銷毀

本文位址: /wangluo/php/254998.html

引用賦值 和傳值賦值

一.a 3 b 5 如果是新手的話,可能會對這個 號產生誤會,這個等號 就是賦值用的.b a b a 發生了什麼?把 b的值讀出來,再把值放到 b的空間裡,即 賦值給 b 就是把 b的值,傳遞給 a,因此叫傳值賦值.echo a 5 在這個過程中,僅僅參考了乙個 b的值,然後,把 b的值,複製乙份到...

php引用傳值詳解

最近有朋友在群裡問到php中引用的用法問題,哥對此也一直一知半解,想起phpchina論壇曾經有過這樣一篇帖子講解引用傳值的用法,於是挖出來放在部落格上以響讀者.php的引用 就是在變數或者函式 物件等前面加上 符號 在php 中引用的意思是 不同的名字訪問同乙個變數內容.與 語言中的指標是有差別的...

php傳值賦值和傳位址賦值

name simon 對變數 name進行賦值 傳值賦值 name b name 對變數 name b進行賦值 傳值賦值 addr name 對變數 addr進行賦值 傳位址賦值 name elaine 改變 name的值 echo name 輸出 name,會發現 name的值發生了變化 echo...