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 相关文章推荐
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
Jul 01 PHP
字母顺序颠倒而单词顺序不变的php代码
Aug 08 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
Jan 11 PHP
百度ping方法使用示例 自动ping百度
Jan 26 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
Jun 21 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
Dec 17 PHP
PHP CURL post数据报错 failed creating formpost data
Oct 16 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
Jan 21 PHP
通过修改Laravel Auth使用salt和password进行认证用户详解
Aug 17 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
php post json参数的传递和接收处理方法
May 31 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
May 14 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类(example.php)
2006/10/09 PHP
php上传图片到指定位置路径保存到数据库的具体实现
2013/12/30 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
PHP+JS实现的实时搜索提示功能
2018/03/13 PHP
PDO::commit讲解
2019/01/27 PHP
图像替换新技术 状态域方法
2010/01/28 Javascript
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
2011/06/28 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
js特殊字符过滤的示例代码
2014/03/05 Javascript
jQuery显示和隐藏 常用的状态判断方法
2015/01/29 Javascript
jquery实现不包含当前项的选择器实例
2015/06/25 Javascript
Bootstrap按钮组件详解
2016/04/26 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
2016/08/31 Javascript
JavaScript日期选择功能示例
2017/01/16 Javascript
详解vue slot插槽的使用方法
2017/06/13 Javascript
ExtJs异步无法向外传值和赋值的完美解决办法
2017/06/14 Javascript
vue中改变滚动条样式的方法
2020/03/03 Javascript
python实现sublime3的less编译插件示例
2014/04/27 Python
python分析网页上所有超链接的方法
2015/05/08 Python
深入理解 Python 中的多线程 新手必看
2016/11/20 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
2018/01/02 Python
Python subprocess模块详细解读
2018/01/29 Python
Ubuntu下Python2与Python3的共存问题
2018/10/31 Python
python同时替换多个字符串方法示例
2019/09/17 Python
ubuntu上安装python的实例方法
2019/09/30 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
Python request使用方法及问题总结
2020/04/26 Python
python实现控制台输出颜色
2021/03/02 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
给校长的建议书200字
2014/05/16 职场文书
机械工程师岗位职责
2014/06/16 职场文书
不服从公司安排检讨书
2014/09/24 职场文书
导游词之西递宏村
2019/12/10 职场文书
详解Laravel服务容器的优势
2021/05/29 PHP
Flask response响应的具体使用
2021/07/15 Python