$$var)& 符號建立別名,兩個變數指向同一記憶體位址unset() 僅移除變數名稱綁定,不直接釋放記憶體(引用計數歸零才會回收)<?php
// 1. 建立基礎變數
$long = "big_long_variable_name";
$$long = "PHP"; // 等同於 $big_long_variable_name = "PHP";
// 2. 引用賦值:$short 成為 $big_long_variable_name 的別名
$short = & $big_long_variable_name;
// 此時 $short、$big_long_variable_name、$$long 三者指向同一記憶體
print "01 \$short is $short."; // 輸出:01 $short is PHP.
print "02 Long is $big_long_variable_name."; // 輸出:02 Long is PHP.
?>
<br /><br />
<?php
// 3. 修改引用變數的值(字串串接)
$big_long_variable_name .= " rocks!";
// 因為是引用關係,$short 同步改變
print "03 \$short is $short"; // 輸出:03 $short is PHP rocks!
print "04 Long is $big_long_variable_name"; // 輸出:04 Long is PHP rocks!
?>
<br /><br />
05 $short is PHP rocks! 06 Long is PHP rocks!
<br /><br />
<?php
// 4. 透過 $short 修改值,引用鏈上所有變數同步更新
$short .= "Programming $short";
print "07 \$short is $short"; // 輸出:07 $short is PHP rocks!Programming PHP rocks!
print "08 Long is $big_long_variable_name"; // 輸出:08 Long is PHP rocks!Programming PHP rocks!
?>
<br /><br />
09 $short is Programming PHP rocks! 10 Long is Programming PHP rocks!
<br /><br />
<?php
// 5. 再次透過原始變數修改
$big_long_variable_name .= "Web Programming $short";
print "11 \$short is $short"; // 輸出同步更新
print "12 Long is $big_long_variable_name";
?>
<br /><br />
<?php
// 6. 銷毀其中一個引用變數
unset($big_long_variable_name);
// $short 不受影響,仍保留最後值
print "13 \$short is $short"; // 輸出:13 $short is PHP rocks!Programming PHP rocks!Web Programming PHP rocks!Programming PHP rocks!
print "14 Long is $big_long_variable_name."; // 輸出:14 Long is. (變數已不存在)
?>
<br /><br />
<?php
// 7. 一般賦值與字串插值示範
$short = "No point TEST1"; // 覆寫而非串接
print "15 \$short is $short."; // 輸出:15 $short is No point TEST1.
$short = "No point TEST2 $short"; // 雙引號內變數解析
print "16 \$short is $short."; // 輸出:16 $short is No point TEST2 No point TEST1.
?>
| 操作 | 語法 | 記憶體行為 | 影響範圍 |
|---|---|---|---|
| 一般賦值 | $a = $b | 複製值 (Copy-on-Write) | 獨立 |
| 引用賦值 | $a = &$b | 共享同一 zval 容器 | 同步變更 |
| 可變變數 | $$name | 動態建立/存取變數 | 視情況 |
| 銷毀變數 | unset($a) | 移除符號表項目,引用計數 -1 | 僅移除該名稱 |
unset 後記憶體不會立即回收。掌握這些機制,能幫助你寫出更可預測、記憶體效率更高的 PHP 程式碼。