Discuz教程网

PHP中获取变量的变量名的一段代码的bug分析

[复制链接]
authicon dly 发表于 2011-9-12 15:52:49 | 显示全部楼层 |阅读模式
代码如下:

  1. /**
  2. * 获取变量名
  3. *
  4. * @param $string
  5. * @return $string
  6. *
  7. * $test = "helo";
  8. * $test2 = "helo";
  9. * getVarName($test2);
  10. */
  11. function getVarName(&$src){
  12. //存储当前变量值
  13. $save = $src;
  14. //存储所有变量值
  15. $allvar = $GLOBALS;
  16. //在函数中不要直拉遍历$GLOBALS,会出现堆栈问题
  17. foreach($allvar as $k=>$v){
  18. //变量值相同,可能不是相同变量,因多个变量的值可能相同
  19. if ($src == $v){
  20. //改变当前变量$src的值
  21. $src = 'change';
  22. //如果$GLOBALS[$k]也跟着改变,那就是同一个变量。
  23. if ($src == $GLOBALS[$k]){
  24. //echo "\$$k name is $k
  25. ";
  26. //还原变量值
  27. $src = $save;
  28. return $k;
  29. }
  30. }
  31. }
  32. }
复制代码

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 数据结构 算法描述 冒泡排序 bubble sort
下一篇:ajax 的post方法实例(带循环
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-2 10:37

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表