php获取一个变量的名字的方法
PHP中,所有的变量都存储在"符号表"的HastTable结构中,符号的作用域是与活动符号表相关联的。因此,同一时间,只有一个活动符号表。
我们要获取到当前活动符号表可以通过get_defined_vars方法来获取。
get_defined_vars//返回所有已定义的变量所组成的数组
根据变量的值查找变量名字,但要注意,有可能有相同值的变量存在。
因此先将当前变量的值保存到一个临时变量中,然后再对原变量赋唯一值,以便查找出变量的名字,找到名字后,将临时变量的值重新赋值到原变量。
例子1:
<?php
$a='100';
echo'$anameis:'.get_variable_name($a).'value:'.$a;//$anameis:avalue:100
/**
*@paramString$var要查找的变量
*@paramArray$scope要搜寻的范围
*@paramString变量名称
*/
functionget_variable_name(&$var,$scope=null){
$scope=$scope==null?$GLOBALS:$scope;//如果没有范围则在globals中找寻
//因有可能有相同值的变量,因此先将当前变量的值保存到一个临时变量中,然后再对原变量赋唯一值,以便查找出变量的名称,找到名字后,将临时变量的值重新赋值到原变量
$tmp=$var;
$var='tmp_value_'.mt_rand();
$name=array_search($var,$scope,true);//根据值查找变量名称
$var=$tmp;
return$name;
}
?>
例子2:获取function里面定义的变量名字
<?php
functiontest(){
$a='100';
echo'$anameis:'.get_variable_name($a);
}
test();//$anameis:undefined
//因为在function中定义的变量globals会找不到
functiontest2(){
$a='100';
echo'$anameis:'.get_variable_name($a,get_defined_vars());
}
test2();//$anameis:a
//将scope设定为get_defined_vars()可以找到
?>