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脚本的10个技巧(1)
Oct 09 PHP
木翼下载系统中说明的PHP安全配置方法
Jun 16 PHP
php Sql Server连接失败问题及解决办法
Aug 07 PHP
提高define性能的php扩展hidef的安装和使用
Jun 14 PHP
PHP使用CURL_MULTI实现多线程采集的例子
Jul 29 PHP
PHP批量查询WordPress留言者E-mail地址实现方法
Feb 15 PHP
php微信公众号开发之欢迎老朋友
Oct 20 PHP
YII框架http缓存操作示例
Apr 29 PHP
PHP使用CURL实现下载文件功能示例
Jun 03 PHP
php常用字符串查找函数strstr()与strpos()实例分析
Jun 21 PHP
Laravel获取所有的数据库表及结构的方法
Oct 10 PHP
php远程请求CURL案例(爬虫、保存登录状态)
Apr 01 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
ftp类(myftp.php)
2006/10/09 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
php从数据库查询结果生成树形列表的方法
2015/04/17 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
雄兵连第三季海报曝光,艾妮熙德成主角,蔷薇新造型
2021/03/09 国漫
JQuery扩展插件Validate 1 基本使用方法并打包下载
2011/09/05 Javascript
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
2013/04/26 Javascript
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
详解JavaScript中的异常处理方法
2015/06/16 Javascript
jQuery实现图片走马灯效果的原理分析
2016/01/16 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
微信小程序获取循环元素id以及wx.login登录操作
2017/08/17 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
2018/01/31 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
vue地址栏直接输入路由无效问题的解决
2018/11/15 Javascript
说说如何在Vue.js中实现数字输入组件的方法
2019/01/08 Javascript
JavaScript解析JSON数据示例
2019/07/16 Javascript
js实现淘宝首页的banner栏效果
2019/11/26 Javascript
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
2020/02/14 Javascript
vue数据响应式原理知识点总结
2020/02/16 Javascript
vue router-link 默认a标签去除下划线的实现
2020/11/06 Javascript
Python中二维列表如何获取子区域元素的组成
2017/01/19 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
2018/08/07 Python
sklearn-SVC实现与类参数详解
2019/12/10 Python
奥地利网上现代灯具和灯饰店:Lampenwelt.at
2018/01/29 全球购物
爱奇艺VIP会员:大剧抢先看
2018/07/11 全球购物
网络工程师个人的自我评价范文
2013/10/01 职场文书
网站编辑求职信
2013/10/17 职场文书
建筑实习自我鉴定
2013/10/18 职场文书
运动会入场词60字
2014/02/15 职场文书
学校安全教育月活动总结
2014/07/07 职场文书
岗位职责说明书模板
2014/07/30 职场文书
个人租房协议书
2014/11/28 职场文书
GO语言异常处理分析 err接口及defer延迟
2022/04/14 Golang