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


Posted in PHP onJuly 07, 2011
/** 
* 获取变量名 
* 
* @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 在线翻译函数代码
May 07 PHP
PHP Session变量不能传送到下一页的解决方法
Nov 27 PHP
php下通过伪造http头破解防盗链的代码
Jul 03 PHP
php 无限级数据JSON格式及JS解析
Jul 17 PHP
php中session_unset与session_destroy的区别分析
Jun 16 PHP
php利用iframe实现无刷新文件上传功能的代码
Sep 29 PHP
十幅图告诉你什么是PHP引用
Feb 22 PHP
PHP扩展程序实现守护进程
Apr 16 PHP
php获取本机真实IP地址实例代码
Mar 31 PHP
thinkphp实现附件上传功能
May 26 PHP
laravel框架添加数据,显示数据,返回成功值的方法
Oct 11 PHP
PHP7新增函数
Mar 09 PHP
PHP的一个基础知识 表单提交
Jul 04 #PHP
php与mysql建立连接并执行SQL语句的代码
Jul 04 #PHP
PHP全概率运算函数(优化版) Webgame开发必备
Jul 04 #PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
Jul 04 #PHP
ajax 的post方法实例(带循环)
Jul 04 #PHP
php高级编程-函数-郑阿奇
Jul 04 #PHP
php 日期和时间的处理-郑阿奇(续)
Jul 04 #PHP
You might like
透析PHP的配置文件php.ini
2006/10/09 PHP
php实现根据字符串生成对应数组的方法
2014/09/22 PHP
PHP微信支付开发实例
2016/06/22 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
2018/04/04 PHP
php使用curl模拟多线程实现批处理功能示例
2019/07/25 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
javascript 二进制运算技巧解析
2012/11/27 Javascript
js阻止冒泡及jquery阻止事件冒泡示例介绍
2013/11/19 Javascript
JavaScript中奇葩的假值示例应用
2014/03/11 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
2014/03/28 Javascript
jQuery中next()方法用法实例
2015/01/07 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
nodejs基础应用
2017/02/03 NodeJs
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
2017/02/08 Javascript
JavaScript你不知道的一些数组方法
2017/08/18 Javascript
php 解压zip压缩包内容到指定目录的实例
2018/01/23 Javascript
vue计算属性get和set用法示例
2019/02/08 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
vue 手机物理监听键+退出提示代码
2020/09/09 Javascript
[35:27]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第二场 10.29
2020/10/29 DOTA
python用来获得图片exif信息的库实例分析
2015/03/16 Python
python制作最美应用的爬虫
2015/10/28 Python
利用python实现命令行有道词典的方法示例
2017/01/31 Python
解决PySide+Python子线程更新UI线程的问题
2019/01/11 Python
PyCharm 2020 激活到 2100 年的教程
2020/03/25 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
牧马人澳大利亚官网:Wrangler澳大利亚
2019/10/08 全球购物
数控机械专业个人的自我评价
2014/01/02 职场文书
大型晚会策划方案
2014/02/06 职场文书
材料会计岗位职责
2014/03/06 职场文书
教师读书活动总结
2014/05/07 职场文书
副总经理任命书
2014/06/05 职场文书
商务英语邮件开头问候语
2015/11/10 职场文书
Python快速实现一键抠图功能的全过程
2021/06/29 Python
悬疑名作《朋友游戏》动画无字ED宣传片 新角色公开
2022/04/13 日漫