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中通过smtp发邮件的类,测试通过
Jan 22 PHP
IStream与TStream之间的相互转换
Aug 01 PHP
php下HTTP Response中的Chunked编码实现方法
Nov 19 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
Oct 08 PHP
php计算函数执行时间的方法
Mar 20 PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
Apr 15 PHP
PHP判断上传文件类型的解决办法
Oct 20 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
May 27 PHP
PHP邮箱验证示例教程
Jun 01 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
Nov 09 PHP
thinkPHP框架乐观锁和悲观锁实例分析
Oct 30 PHP
php7 参数、整形及字符串处理机制修改实例分析
May 25 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中date()日期函数有关参数整理
2011/07/19 PHP
php中opendir函数用法实例
2014/11/15 PHP
PHP中捕获超时事件的方法实例
2015/02/12 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
2016/03/19 PHP
php用wangeditor3实现图片上传功能
2019/08/22 PHP
PHP number_format函数原理及实例解析
2020/07/14 PHP
利用XMLHTTP传递参数在另一页面执行并刷新本页
2006/10/26 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
jQuery文本框(input textare)事件绑定方法教程
2013/04/24 Javascript
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
JS中parseInt()和map()用法分析
2016/12/16 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
2017/11/09 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
vuex 中插件的编写案例解析
2019/06/10 Javascript
html-webpack-plugin修改页面的title的方法
2020/06/18 Javascript
详解Python中打乱列表顺序random.shuffle()的使用方法
2019/11/11 Python
如何使用Pytorch搭建模型
2020/10/26 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
2021/02/20 Python
css3背景图片透明叠加属性cross-fade简介及用法实例
2013/01/08 HTML / CSS
html5应用缓存_动力节点Java学院整理
2017/07/13 HTML / CSS
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
HTML5触摸事件演化tap事件介绍
2016/03/25 HTML / CSS
惠普加拿大在线商店:HP加拿大
2017/09/15 全球购物
信号量和自旋锁的区别?如何选择使用?
2015/09/08 面试题
介绍一下SOA和SOA的基本特征
2016/02/24 面试题
经典优秀个人求职自荐信格式
2013/09/25 职场文书
小学生自我评价范文
2014/01/25 职场文书
运动会开幕式邀请函
2014/02/03 职场文书
小学生元旦广播稿
2014/02/21 职场文书
文艺晚会主持词
2014/03/24 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS
python运算符之与用户交互
2022/04/13 Python