簡單看一下 PHP 參考是如何運作的
<?php
/* 想像一下這是記憶體映射
______________________________
|指標 | 值 | 變數 |
-----------------------------------
| 1 | NULL | --- |
| 2 | NULL | --- |
| 3 | NULL | --- |
| 4 | NULL | --- |
| 5 | NULL | --- |
------------------------------------
建立一些變數 */
$a=10;
$b=20;
$c=array ('one'=>array (1, 2, 3));
/* 看看記憶體
_______________________________
|指標 | 值 | 變數 |
-----------------------------------
| 1 | 10 | $a |
| 2 | 20 | $b |
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 | $c['one'][2] |
------------------------------------
執行 */
$a=&$c['one'][2];
/* 看看記憶體
_______________________________
|指標 | 值 | 變數 |
-----------------------------------
| 1 | NULL | --- | // $a 的值被銷毀,指標被釋放
| 2 | 20 | $b |
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 | $c['one'][2] ,$a | // $a 現在在這裡
------------------------------------
執行 */
$b=&$a; // 或 $b=&$c['one'][2]; 結果相同,因為 "$c['one'][2]" 和 "$a" 位於同一個指標。
/* 看看記憶體
_________________________________
|指標 | 值 | 變數 |
--------------------------------------
| 1 | NULL | --- |
| 2 | NULL | --- | // $b 的值被銷毀,指標被釋放
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 |$c['one'][2] ,$a , $b | // $b 現在在這裡
---------------------------------------
接下來執行 */
unset($c['one'][2]);
/* 看看記憶體
_________________________________
|指標 | 值 | 變數 |
--------------------------------------
| 1 | NULL | --- |
| 2 | NULL | --- |
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 | $a , $b | // $c['one'][2] 被銷毀,不在記憶體中,也不在陣列中
---------------------------------------
接下來執行 */
$c['one'][2]=500; //現在它在陣列中
/* 看看記憶體
_________________________________
|指標 | 值 | 變數 |
--------------------------------------
| 1 | 500 | $c['one'][2] | //建立它,它會落在記憶體中的任何(下一個)空閒指標上
| 2 | NULL | --- |
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 | $a , $b | //這個指標正在使用中
---------------------------------------
讓我們嘗試將 $c['one'][2] 返回到舊的指標,並移除參考 $a,$b。 */
$c['one'][2]=&$a;
unset($a);
unset($b);
/* 看看記憶體
_________________________________
|指標 | 值 | 變數 |
--------------------------------------
| 1 | NULL | --- |
| 2 | NULL | --- |
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 | $c['one'][2] | //$c['one'][2] 被返回,$a,$b 被銷毀
--------------------------------------- ?>
希望這個說明對您有所幫助。