PHP 變數儲存在 **符號表 (Symbol Table)**,本質是 HashTable。$GLOBALS 即全域符號表,函式內部有獨立符號表 (可用 get_defined_vars() 取得)。**根據值反查變數名** 需解決「多個變數同值」問題。
&$var) {
$tmp = $var;
$marker = '__MARKER_' . spl_object_id($var) . '_' . $key; // 物件用 ID,標量用 key
$var = $marker;
$name = array_search($marker, $scope, true);
$var = $tmp;
$names[$key] = $name;
}
return $names;
}
$x = 1; $y = 2; $z = 3;
$vars = ['x' => $x, 'y' => $y, 'z' => $z]; // 需按引用傳遞
// 注意:以上寫法複製了值,無法修改原變數
// 正確用法需在函式內部操作 $GLOBALS 直接查找
?>
dump($var) 自動顯示變數名validate('email', $email) 自動帶入欄位名{$user.name} 編譯時記錄變數路徑&$var,否則操作副本「臨時值交換法」是 PHP 取得變數名稱的經典技巧:**備份值 → 設定唯一標記 → 符號表搜尋 → 還原值** 。適用於除錯、驗證、元編程場景。生產代碼建議改用**顯式傳遞字串名稱**或**屬性/反射**方案,避免副作用與效能損耗。