• 技术文章 >后端开发 >php教程

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

    2016-06-01 12:16:30原创315
    复制代码 代码如下:
    /**
    * 获取变量名
    *
    * @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 = "//m.sbmmt.com/m/article/hello";
    $countNum=0;
    echo getVarName($test2);
    //按道理应该输出为”test2“,但是输出的是"countNum",

    因为函数中的
    if ($src == $v) 这里存在问题 比如$src="//m.sbmmt.com/m/article/hello", $GLOBALS里面有个变量$countNUm=0;
    这时在循环的时候判断 if ($src == $v) ,即"//m.sbmmt.com/m/article/hello"==0,比较的结果为true,类型转换的时候“hello“转为整形为0,
    然后就退出循环了,得到错误的结果。
    一个解决办法就是 if ($src == $v) 改为 if($src===$v),即恒等。
    如果我理解错了欢迎您指正,一起进步。
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:变量名
    上一篇:PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和_PHP 下一篇:fleaphp crud操作之findByField函数的使用方法_PHP
    PHP编程就业班

    相关文章推荐

    • HTML英文单词汇总(PHP新手收藏)• 我28了,还能不能学PHP?• CSS英文单词汇总(PHP新手收藏)• PHP英文单词汇总(PHP新手收藏)• ThinkPHP3.2 加载过程(2)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网