PHP中获取变量的变量名的一段代码的bug分析
作者:bea
代码如下: /** * 获取变量名 * * @param $string * @return $string * * $test = "helo"; * $test2 = "helo"; * getVarName($test2); */ function getVarName(&$src){ //存储当前变量值 $save = $src; //存储所有变量值 $allvar = $GLOBALS; //在函数中不要直拉遍历$GLOB
代码如下:
/**
* 获取变量名
*
* @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入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
- php入门学习知识点七 PHP函数的基本应用
- php入门学习知识点六 PHP文件的读写操作代码
- php入门学习知识点五 关于php数组的几个基本操作
- php入门学习知识点四 PHP正则表达式基本应用
- php入门学习知识点三 PHP上传
- php入门学习知识点二 PHP简单的分页过程与原理
- php入门学习知识点一 PHP与MYSql连接与查询
- php自定义函数call_user_func和call_user_func_array详解
- PHP 获取MySQL数据库里所有表的实现代码
- PHP setcookie设置Cookie用法(及设置无效的问题)
- php中使用explode查找某个字符是否存在的方法
- php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
- php array_pop()数组函数将数组最后一个单元弹出(出栈)
- php array_map()数组函数使用说明
- php array_walk() 数组函数
- 7个超级实用的PHP代码片段
- php函数的常用方法及注意之处小结
- PHP 数据结构 算法描述 冒泡排序 bubble sort