PHP 變量存於符號表 (HashTable),get_defined_vars() 返回當前作用域所有變量。通過給目標變量賦予唯一隨機值,再在符號表中反查鍵名,最後恢復原值。
<?php
function get_variable_name(&$var, $scope = null) {
$scope = $scope === null ? $GLOBALS : $scope;
$tmp = $var;
$var = 'tmp_value_' . mt_rand(); // 唯一標記
$name = array_search($var, $scope, true); // 嚴格比較反查
$var = $tmp; // 恢復原值
return $name;
}
?>
<?php
$a = '100';
echo '$a name is: ' . get_variable_name($a) . ' value: ' . $a;
// 輸出: $a name is: a value: 100
// 函數內部變量需傳入 get_defined_vars()
function test() {
$a = '100';
echo get_variable_name($a); // undefined (查 $GLOBALS 找不到)
}
function test2() {
$a = '100';
echo get_variable_name($a, get_defined_vars()); // a
}
?>
&$var 必須,否則無法修改原變量ReflectionReference 但無法直接獲取變量名