PHP获取变量的变量名的一段代码的bug
2011-07-07 11:37
429 查看
百度一下关于php获取变量名的办法都是下面这个函数。但是用了发现有点bug
/** * 获取变量名 * * @param $string * @return $string * * $test = "helo"; * $test2 = "helo"; * getVarName($test2); */ function getVarName(&$src){ //存储当前变量值 $save = $src; //存储所有变量值 $allvar = $GLOBALS; //在函数中不要直拉遍历$GLOBALS,会出现堆栈问题 foreach($allvar as $k=>$v){ //变量值相同,可能不是相同变量,因多个变量的值可能相同 if ($src == $v){ //改变当前变量$src的值 $src = 'change'; //如果$GLOBALS[$k]也跟着改变,那就是同一个变量。 if ($src == $GLOBALS[$k]){ //echo "\$$k name is $k "; //还原变量值 $src = $save; return $k; } } } } copy下来后发现这个怎么测试结果有时候对有时候不对,想了很久,终于弄明白,虽然很简单,但是自己还是记录下,希望遇到同样情况的同学注意。 比如:现在我测试 $test2 = "hello"; $countNum=0; echo getVarName($test2); //按道理应该输出为”test2“,但是输出的是"countNum", 因为函数中的 if ($src == $v) 这里存在问题 比如$src="hello", $GLOBALS里面有个变量$countNUm=0; 这时在循环的时候判断 if ($src == $v) ,即"hello"==0,比较的结果为true,类型转换的时候“hello“转为整形为0, 然后就退出循环了,得到错误的结果。 一个解决办法就是 if ($src == $v) 改为 if($src===$v),即恒等。 如果我理解错了欢迎您指正,一起进步。
相关文章推荐
- PHP获取变量的变量名的一段代码的bug
- PHP中获取变量的变量名的一段代码的bug分析
- 分享一段php获取linux服务器状态的代码
- php 获取全局变量的代码
- PHP代码优化之成员变量获取速度对比
- PHP代码优化 成员变量获取速度对比
- 分享一段php获取任意时间的前一天代码
- php开发中如何获取所在全局变量的代码实例
- 用PHP写一段代码,实现不使用第3个变量,交换$a、$b的值,$a、$b的初始值自己定。(五种方法实现)
- 分享一段php获取linux服务器状态的代码
- js获取php变量的实现代码
- php 获取全局变量的代码
- 获取评论相关的字段值一段php代码
- 一段获取windows环境变量的代码
- js获取php变量的实现代码
- PHP代码优化之成员变量获取速度对比
- VBA获取系统环境变量及特殊文件夹的各种代码与方法
- php 获取变量的类型
- 计算一段日期内的周末天数的php代码(星期六,星期日总和)