加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 05:56:46 所属栏目:PHP教程 来源:网络整理
导读:div class="codetitle" a style="CURSOR: pointer" data="43354" class="copybut" id="copybut43354" onclick="doCopy('code43354')" 代码如下: div class="codebody" id="code43354" /* 获取变量名 @param $string @return $string $test = "helo"; $test2

<div class="codetitle"><a style="CURSOR: pointer" data="43354" class="copybut" id="copybut43354" onclick="doCopy('code43354')"> 代码如下:<div class="codebody" id="code43354">
/*
获取变量名

@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下来后发现这个怎么测试结果有时候对有时候不对,想了很久,终于弄明白,虽然很简单,但是自己还是记录下,希望遇到同样情况的同学注意。
比如:现在我测试
<div class="codetitle"><a style="CURSOR: pointer" data="35068" class="copybut" id="copybut35068" onclick="doCopy('code35068')"> 代码如下:<div class="codebody" id="code35068">
$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),即恒等。
如果我理解错了欢迎您指正,一起进步。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读