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 一个比较完善的简单文件上传
Mar 25 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
May 09 PHP
解析PHP多种序列化与反序列化的方法
Jun 06 PHP
实测在class的function中include的文件中非php的global全局环境
Jul 15 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
Jun 10 PHP
PHP将页面中点击数量高的链接进行高亮显示的方法
May 30 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
Oct 07 PHP
PHP扩展mcrypt实现的AES加密功能示例
Jan 29 PHP
Mac下快速搭建PHP开发环境步骤详解
May 05 PHP
Laravel 类和接口注入相关的代码
Oct 15 PHP
laravel-admin 实现在指定的相册下添加照片
Oct 21 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
Apr 27 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 简单日历实现代码
2009/10/28 PHP
UCenter 批量添加用户的php代码
2012/07/17 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
2019/04/12 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
Google韩国首页图标动画效果
2007/08/26 Javascript
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
js数组去重的常用方法总结
2014/01/24 Javascript
IE下通过a实现location.href 获取referer的值
2014/09/04 Javascript
javascript强制点击广告的方法
2015/02/06 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
JavaScript中的子窗口与父窗口的互相调用问题
2017/02/08 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
vue-cli + sass 的正确打开方式图文详解
2017/10/27 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
vue实现循环滚动列表
2020/06/30 Javascript
Python批量转换文件编码格式
2015/05/17 Python
在Django的URLconf中使用多个视图前缀的方法
2015/07/18 Python
qpython3 读取安卓lastpass Cookies
2016/06/19 Python
Python中Iterator迭代器的使用杂谈
2016/06/20 Python
python 全局变量的import机制介绍
2017/09/07 Python
python编程线性回归代码示例
2017/12/07 Python
Pandas之排序函数sort_values()的实现
2019/07/09 Python
基于Python函数和变量名解析
2019/07/19 Python
Python小程序 控制鼠标循环点击代码实例
2019/10/08 Python
Python与C/C++的相互调用案例
2021/03/04 Python
Html5监听手机摇一摇事件的实现
2019/11/07 HTML / CSS
La Redoute英国官网:法国时尚品牌
2017/04/27 全球购物
成功的酒店创业计划书
2013/12/27 职场文书
继承权公证书
2014/04/09 职场文书
无毒社区工作方案
2014/05/23 职场文书
博士给导师的自荐信
2015/03/06 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python
Java实现多线程聊天室
2021/06/26 Java/Android
Python 绘制多因子柱状图
2022/05/11 Python