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 获取可变函数参数的函数
Aug 26 PHP
PHP XML操作类DOMDocument
Dec 16 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
Nov 07 PHP
php如何解决无法上传大于8M的文件问题
Mar 10 PHP
php实现的九九乘法口诀表简洁版
Jul 28 PHP
PHP实现的下载远程图片自定义函数分享
Jan 28 PHP
PHP数组函数知识汇总
May 12 PHP
ThinkPHP表单令牌错误的相关解决方法分析
May 20 PHP
php实现文章置顶功能的方法
Oct 20 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
Mar 15 PHP
PHP基于面向对象实现的留言本功能实例
Apr 04 PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 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+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
PHP版网站缓存加快打开速度的方法分享
2012/06/03 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
workerman结合laravel开发在线聊天应用的示例代码
2018/10/30 PHP
PHP微商城开源代码实例
2019/03/27 PHP
js报$ is not a function 的问题的解决方法
2014/01/20 Javascript
对Jquery中的ajax再封装,简化操作示例
2014/02/12 Javascript
js实现遮罩层划出效果是生成div而不是显示
2014/07/29 Javascript
jQuery实现div拖拽效果实例分析
2016/02/20 Javascript
购物车前端开发(jQuery和bootstrap3)
2016/08/27 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
angularjs ui-router中路由的二级嵌套
2017/03/10 Javascript
关于ES6箭头函数中的this问题
2018/02/27 Javascript
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
2019/01/24 Javascript
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
vue请求数据的三种方式
2020/03/04 Javascript
Nodejs实现微信分账的示例代码
2021/01/19 NodeJs
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
[32:39]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第一场 11.04
2020/11/04 DOTA
python将字符串转换成数组的方法
2015/04/29 Python
python+tkinter编写电脑桌面放大镜程序实例代码
2018/01/16 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
python 把文件中的每一行以数组的元素放入数组中的方法
2018/04/29 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
python实现简易学生信息管理系统
2020/04/05 Python
pytorch如何冻结某层参数的实现
2020/01/10 Python
python 计算方位角实例(根据两点的坐标计算)
2020/01/17 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
python+requests接口自动化框架的实现
2020/08/31 Python
德购商城:德国进口直邮商城
2017/06/13 全球购物
大学生职业规划书的范本
2014/02/18 职场文书
网络技术专业求职信
2014/07/13 职场文书
Python基础之进程详解
2021/05/21 Python
python实现语音常用度量方法的代码详解
2021/05/25 Python
使用MybatisPlus打印sql语句
2022/04/22 SQL Server