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 相关文章推荐
用libTemplate实现静态网页的生成
Oct 09 PHP
PHP静态新闻列表自动生成代码
Jun 14 PHP
使用php统计字符串中中英文字符的个数
Jun 23 PHP
浅析php工厂模式
Nov 25 PHP
四个PHP非常实用的功能
Sep 29 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
Jan 07 PHP
Thinkphp整合微信支付功能
Dec 14 PHP
详解php用curl调用接口方法,get和post两种方式
Jan 13 PHP
PHP错误处理函数register_shutdown_function使用示例
Jul 03 PHP
PHP测试框架PHPUnit组织测试操作示例
May 28 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 PHP
PHP实现通过文本文件统计页面访问量功能示例
Feb 13 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
模板引擎正则表达式调试小技巧
2011/07/20 PHP
PHP递归算法的简单实例
2019/02/28 PHP
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
2008/12/25 Javascript
有趣的javascript数组定义方法
2010/09/10 Javascript
js 自制滚动条的小例子
2013/03/16 Javascript
jquery 关于event.target使用的几点说明介绍
2013/04/26 Javascript
javascript数组操作方法小结和3个属性详细介绍
2014/07/05 Javascript
基于zTree树形菜单的使用实例
2017/12/25 Javascript
json字符串传到前台input的方法
2018/08/06 Javascript
js canvas实现写字动画效果
2018/11/30 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
详解关闭令人抓狂的ESlint 语法检测配置方法
2019/10/28 Javascript
Vue快速实现通用表单验证的方法
2020/02/24 Javascript
[01:15:18]2014 DOTA2国际邀请赛中国区预选赛 LGD VS Speed Gaming.cn
2014/05/22 DOTA
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python 快速实现CLI 应用程序的脚手架
2017/12/05 Python
Python3.5.3下配置opencv3.2.0的操作方法
2018/04/02 Python
python实现按长宽比缩放图片
2018/06/07 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
django基于cors解决跨域请求问题详解
2019/08/06 Python
使用python写的opencv实时监测和解析二维码和条形码
2019/08/14 Python
Python流程控制常用工具详解
2020/02/24 Python
python使用建议技巧分享(三)
2020/08/18 Python
一份报关员的职业规划范文
2014/01/08 职场文书
30年同学聚会感言
2014/01/30 职场文书
医学生毕业自我鉴定
2014/03/26 职场文书
财务人员担保书
2014/05/13 职场文书
医院竞聘演讲稿
2014/05/16 职场文书
党支部创先争优公开承诺书
2015/04/30 职场文书
2016年“11.11”光棍节活动总结
2016/04/05 职场文书
如何使用flask将模型部署为服务
2021/05/13 Python
Mysql关于数据库是否应该使用外键约束详解说明
2021/10/24 MySQL
Java实现二分搜索树的示例代码
2022/03/17 Java/Android
css3 选择器
2022/05/11 HTML / CSS
Win11远程连接不上怎么办?Win11远程桌面用不了的解决方法
2022/08/05 数码科技
Nginx使用ngx_http_upstream_module实现负载均衡功能示例
2022/08/05 Servers