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()可以找到 ?>