PHP中获取变量的变量名的一段代码的bug分析

 更新时间:2011年07月07日 11:55:49   作者:   我要评论
百度一下关于php获取变量名的办法都是下面这个函数。但是用了发现有点bug
复制代码 代码如下:

/**
* 获取变量名
*
* @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中return的用法实例分析

    php中return的用法实例分析

    这篇文章主要介绍了php中return的用法,实例分析了php中return的功能及常见的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • PHP常用的三种设计模式

    PHP常用的三种设计模式

    本文为大家介绍常用的三种php设计模式:单例模式、工厂模式、观察者模式,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • PHP 开发环境配置(Zend Studio)

    PHP 开发环境配置(Zend Studio)

    运行Zend Studio安装文件(ZendStudio-7.1.2.exe) 安装选项请按照图片中我的选择。
    2010-04-04
  • 替换php字符串中的单引号为双引号的方法

    替换php字符串中的单引号为双引号的方法

    下面小编就为大家带来一篇替换php字符串中的单引号为双引号的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • php设计模式之单例模式实例分析

    php设计模式之单例模式实例分析

    这篇文章主要介绍了php设计模式之单例模式,实例分析了单例模式的原理与相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • PHP PDO金沙国际官网操作预处理与注意事项

    PHP PDO金沙国际官网操作预处理与注意事项

    今天小编就为大家分享一篇关于PHP PDO金沙国际官网操作预处理与注意事项,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • php控制文件下载速度的方法

    php控制文件下载速度的方法

    这篇文章主要介绍了php控制文件下载速度的方法,实例分析了php操作文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • WordPress分页伪静态加html后缀

    WordPress分页伪静态加html后缀

    本文给大家分享的是在使用WordPress的过程中,发现其内容页分页的形式非常的不友好,于是就动手进行修改的过程以及详细代码,非常的实用,推荐给大家。
    2016-06-06
  • php 三大特点:封装,继承,多态

    php 三大特点:封装,继承,多态

    本文主要介绍了php 三大特点:封装,继承,多态。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • 如何解决CI框架的Disallowed Key Characters错误提示

    如何解决CI框架的Disallowed Key Characters错误提示

    本篇文章是对解决CodeIgniter框架应用中,出现Disallowed Key Characters错误提示的方法,进行了详细的分析介绍,需要的朋友可以参考下
    2013-07-07

最新评论