1. 程式人生 > >PHP變數在記憶體中釋放問題

PHP變數在記憶體中釋放問題

$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指標指向的值發生改變。