您当前的位置: 首页 > 网站编程 > PHP教程 > PHP获取变量的变量名的一段代码的bug

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

作者:不详 来源:网络 发布时间: 2014-07-30 16:48 点击:
百度一下关于php获取变量名的办法都是下面这个函数。但是用了发现有点bug /** * 获取变量名 * * @param $string * @return $string * * $test = helo; * $test2 = helo; * getVarName($test2); */ function getVarName($src){ //存储当前变量值 $save = $src; //存储所

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

  百度一下关于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"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4