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 相关文章推荐
Linux下ZendOptimizer的安装与配置方法
Apr 12 PHP
PHP中json_encode、json_decode与serialize、unserialize的性能测试分析
Jun 09 PHP
支持中文的php加密解密类代码
Nov 27 PHP
php的POSIX 函数以及进程测试的深入分析
Jun 03 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
Jun 13 PHP
php实现的一个很好用HTML解析器类可用于采集数据
Sep 23 PHP
php利用新浪接口查询ip获取地理位置示例
Jan 20 PHP
php中动态修改ini配置
Oct 14 PHP
给WordPress中的留言加上楼层号的PHP代码实例
Dec 14 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
Dec 17 PHP
php生成带logo二维码方法小结
Apr 08 PHP
php微信扫码支付 php公众号支付
Mar 24 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 autoload机制的详解
2013/06/09 PHP
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
php启用sphinx全文搜索的实现方法
2014/12/24 PHP
PHP创建PowerPoint2007文档的方法
2015/12/10 PHP
php简单处理XML数据的方法示例
2017/05/19 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
JXTree对象,读取外部xml文件数据,生成树的函数
2007/04/02 Javascript
Javascript 的addEventListener()及attachEvent()区别分析
2009/05/21 Javascript
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
AngularJS 避繁就简的路由
2016/07/01 Javascript
很棒的js Tab选项卡切换效果
2016/08/30 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
2016/11/15 Javascript
文件上传的几个示例分享【推荐】
2016/12/16 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
详解用node编写自己的cli工具
2017/05/23 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
2017/09/10 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
jQuery实现购物车的总价计算和总价传值功能
2018/11/28 jQuery
JavaScript this使用方法图解
2020/02/04 Javascript
[36:22]VP vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python中 ? : 三元表达式的使用介绍
2013/10/09 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
2018/03/13 Python
django初始化数据库的实例
2018/05/27 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
2020/10/22 Python
Linux如何修改文件和文件夹的权限
2013/09/05 面试题
班组长安全职责
2014/01/05 职场文书
会计自我鉴定
2014/02/04 职场文书
平安建设汇报材料
2014/12/29 职场文书
2015年妇幼卫生工作总结
2015/05/23 职场文书
2015年会计工作总结范文
2015/05/26 职场文书
小学班级管理心得体会
2016/01/07 职场文书
Redis 配置文件重要属性的具体使用
2021/05/20 Redis