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正则
Jul 07 PHP
PHP EOT定界符的使用详解
Sep 30 PHP
php判断输入不超过mysql的varchar字段的长度范围
Jun 24 PHP
php中的路径问题与set_include_path使用介绍
Feb 11 PHP
phpmyadmin中禁止外网使用的方法
Nov 04 PHP
PHP实现WebService的简单示例和实现步骤
Mar 27 PHP
php实现通过cookie换肤的方法
Jul 13 PHP
PHP使用Pthread实现的多线程操作实例
Nov 14 PHP
php中get_magic_quotes_gpc()函数说明
Feb 06 PHP
PHP 记录访客的浏览信息方法
Jan 29 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
Apr 20 PHP
php使用curl模拟多线程实现批处理功能示例
Jul 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把大写命名转换成下划线分割命名
2015/04/27 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
Laravel 集成 Geetest验证码的方法
2018/05/14 PHP
Javascript 网页黑白效果实现代码(兼容IE/FF等)
2010/04/23 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
2013/02/05 Javascript
javascript中onclick(this)用法介绍
2013/04/19 Javascript
js实现点小图看大图效果的思路及示例代码
2013/10/28 Javascript
Jquery日期选择datepicker插件用法实例分析
2015/06/08 Javascript
webpack入门必知必会
2017/01/16 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
详解react-router4 异步加载路由两种方法
2017/09/12 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
2018/05/22 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
如何将Node.js中的回调转换为Promise
2020/11/10 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
Python 条件判断的缩写方法
2008/09/06 Python
详解Python中的元组与逻辑运算符
2015/10/13 Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
python设计模式大全
2016/06/27 Python
JS设计模式之责任链模式实例详解
2018/02/03 Python
django框架自定义用户表操作示例
2018/08/07 Python
python多进程控制学习小结
2018/10/31 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
2020/02/20 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
金讯Java笔试题目
2013/06/18 面试题
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
学雷锋标语
2014/06/25 职场文书
交通事故和解协议书
2014/09/25 职场文书
2014年新教师工作总结
2014/11/08 职场文书
先进教育工作者事迹材料
2014/12/23 职场文书
介绍信范文
2015/01/31 职场文书
护士先进个人总结
2015/02/13 职场文书