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 session常见问题集锦及解决办法总结
Mar 18 PHP
相对路径转化成绝对路径
Apr 10 PHP
PHP Ajax中文乱码问题解决方法
Feb 27 PHP
php 获取可变函数参数的函数
Aug 26 PHP
php生成扇形比例图实例
Nov 06 PHP
ThinkPHP之import方法实例详解
Jun 20 PHP
PHP中使用json数据格式定义字面量对象的方法
Aug 20 PHP
PHP框架Laravel学习心得体会
Oct 28 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
May 04 PHP
php进程daemon化的正确实现方法
Sep 06 PHP
Laravel框架实现的rbac权限管理操作示例
Jan 16 PHP
详解PHP服务器如何在有限的资源里最大提升并发能力
May 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
JAVA/JSP学习系列之七
2006/10/09 PHP
php中文字母数字验证码实现代码
2008/04/25 PHP
php中常见的sql攻击正则表达式汇总
2014/11/06 PHP
php微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
laravel 查询数据库获取结果实现判断是否为空
2019/10/24 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
2020/04/23 PHP
PHP实现简单的计算器
2020/08/28 PHP
jQuery+CSS 实现的超Sexy下拉菜单
2010/01/17 Javascript
Script的加载方法小结
2011/01/12 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
基于bootstrap实现广告轮播带图片和文字效果
2016/07/22 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
canvas 弹幕效果(实例分享)
2017/01/11 Javascript
Bootstrap进度条学习使用
2017/02/09 Javascript
Angular中支持SCSS的方法
2017/11/18 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
JavaScript 性能提升之路(推荐)
2019/04/10 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
Angular封装表单控件及思想总结
2019/12/11 Javascript
vue开发中遇到的问题总结
2020/04/07 Javascript
[01:44]Ti10举办地公布
2019/08/25 DOTA
使用Python写CUDA程序的方法
2017/03/27 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
2019/02/12 Python
Python tkinter模版代码实例
2020/02/05 Python
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
安康杯竞赛活动总结
2014/05/05 职场文书
市场营销毕业求职信
2014/08/07 职场文书
死亡诗社观后感
2015/06/05 职场文书
ant design vue的form表单取值方法
2022/06/01 Vue.js
Python序列化模块JSON与Pickle
2022/06/05 Python