• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 4年前 (2022-01-26) 16次浏览 已收录 0个评论
 <BR>/** <BR>* 获取变量名 <BR>* <BR>* @param $string <BR>* @return $string <BR>* <BR>* $test = "helo"; <BR>* $test2 = "helo"; <BR>* getVarName($test2); <BR>*/ <BR>function getVarName(&$src){ <BR>//存储当前变量值 <BR>$save = $src; <BR>//存储所有变量值 <BR>$allvar = $GLOBALS; <BR>//在函数中不要直拉遍历$GLOBALS,会出现堆栈问题 <BR>foreach($allvar as $k=>$v){ <BR>//变量值相同,可能不是相同变量,因多个变量的值可能相同 <BR>if ($src == $v){ <BR>//改变当前变量$src的值 <BR>$src = 'change'; <BR>//如果$GLOBALS[$k]也跟着改变,那就是同一个变量。 <BR>if ($src == $GLOBALS[$k]){ <BR>//echo "\$$k name is $k <BR>"; <BR>//还原变量值 <BR>$src = $save; <BR>return $k; <BR>} <BR>} <BR>} <BR>} <BR>


copy下来后发现这个怎么测试结果有时候对有时候不对,想了很久,终于弄明白,虽然很简单,但是自己还是记录下,希望遇到同样情况的同学注意。
比如:现在我测试

 <BR>$test2 = "hello"; <BR>$countNum=0; <BR>echo getVarName($test2); <BR>//按道理应该输出为”test2“,但是输出的是"countNum", <BR>


因为函数中的
if ($src == $v) 本文来源gao@!dai!ma.com搞$$代^@码!网!搞gaodaima代码这里存在问题 比如$src=”hello”, $GLOBALS里面有个变量$countNUm=0;
这时在循环的时候判断 if ($src == $v) ,即”hello”==0,比较的结果为true,类型转换的时候“hello“转为整形为0,
然后就退出循环了,得到错误的结果。
一个解决办法就是 if ($src == $v) 改为 if($src===$v),即恒等。
如果我理解错了欢迎您指正,一起进步。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP中获取变量的变量名的一段代码的bug分析_php技巧
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址