PHP變數在記憶體中釋放問題
阿新 • • 發佈:2019-01-28
$a = array('1','2','3');
$b = &$a;
$a = array('a','b','c');
var_dump($a);
var_dump($b);
輸出結果為
array
0 => string 'a' (length=1)
1 => string 'b' (length=1)
2 => string 'c' (length=1)
array
0 => string 'a' (length=1)
1 => string 'b' (length=1)
2 => string 'c' (length =1)
$b = &$a;
這個語句的意思大概可以理解為給b賦值一個指向a的指標,(php中沒有指標這一說)
此時無論改變a的值還是b的值均會影響原來的值。因為$b只在記憶體中儲存了一個指標,而沒有分配儲存變數空間。
$a = array('1','2','3');
$b = &$a;
$a = array('a','b','c');
unset($a);
var_dump($a);
var_dump($b);
輸出結果為
null
array
0 => string 'a' (length=1)
1 => string 'b' (length=1)
2 => string 'c' (length=1)
當登出(unset)$b時不會影響$a的結果。因為儲存的只是一個指標。
當登出(unset)$a時,一個有意思的事情,在記憶體中,先將$a複製一份並分配一個儲存空間給$b。同時刪除$a和指標$b。因此登出$a之後,$b的結果也不會發生改變,僅是由指標變成真正的儲存值得變數
$a = array('1','2','3');
$b = &$a;
$a = array('a','b','c');
$a = null
var_dump($a);
var_dump($b);
輸出結果均為null
可以簡單的理解為給$a
賦值 null 時,$a $b
結果都為null,因為$b
指標指向的值發生改變。