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数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
Oct 29 PHP
解决phpmyadmin中缺少mysqli扩展问题的方法
May 06 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
Jun 03 PHP
PHP代码审核的详细介绍
Jun 13 PHP
php中sprintf与printf函数用法区别解析
Feb 17 PHP
php实现的CSS更新类实例
Sep 22 PHP
php利用cookies实现购物车的方法
Dec 10 PHP
PHP 的比较运算与逻辑运算详解
May 12 PHP
浅谈PHP实现大流量下抢购方案
Dec 15 PHP
PHP实现图片压缩
Sep 09 PHP
php使用fullcalendar日历插件详解
Mar 06 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
Apr 26 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 中使用随机数的三个步骤
2006/10/09 PHP
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
PHP daddslashes 使用方法介绍
2012/10/26 PHP
php unlink()函数使用教程
2018/07/12 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
js报错 Object doesn't support this property or method的原因分析
2011/03/31 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
JS、jQuery中select的用法详解
2016/04/21 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
详解使用vue脚手架工具搭建vue-webpack项目
2017/05/10 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
Vue-Router进阶之滚动行为详解
2017/09/13 Javascript
vue-router配合ElementUI实现导航的实例
2018/02/11 Javascript
boostrap模态框二次弹出清空原有内容的方法
2018/08/10 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
2019/09/21 Javascript
关于vue组件事件属性穿透详解
2019/10/28 Javascript
python 判断一个进程是否存在
2009/04/09 Python
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
python中argparse模块用法实例详解
2015/06/03 Python
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
10个Python小技巧你值得拥有
2018/09/29 Python
用Python实现校园通知更新提醒功能
2019/11/23 Python
如何在django中实现分页功能
2020/04/22 Python
vscode+PyQt5安装详解步骤
2020/08/12 Python
html5+css3之CSS中的布局与Header的实现
2014/11/21 HTML / CSS
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
自主招生自荐书
2013/11/29 职场文书
应届大专毕业生自我鉴定
2014/04/08 职场文书
给校长的建议书范文
2015/09/14 职场文书
2019最新劳动仲裁申请书!
2019/07/08 职场文书
Windows中Redis安装配置流程并实现远程访问功能
2021/06/07 Redis
CSS几步实现赛博朋克2077风格视觉效果
2021/06/16 HTML / CSS
Node实现搜索框进行模糊查询
2021/06/28 Javascript