gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章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分析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com