zoukankan      html  css  js  c++  java
  • PHP获取变量的变量名的一段代码的bug

    简介:这是PHP获取变量的变量名的一段代码的bug的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=340517' scrolling='no'>百度一下关于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),即恒等。
    
     如果我理解错了欢迎您指正,一起进步。
    

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/340517.html pageNo:7
  • 相关阅读:
    Django的model form
    Django之验证码
    ajax获取跨域数据
    js+css模仿打字效果
    CSS自定义消息提示
    CSS画各种二维图形
    最简单的动态进度条
    利用javascript(自定义事件)记录尺寸可变元素的尺寸变化过程
    超级简单的利用javascript实现文件拖拽事件
    javascript 公历与农历相互转换工具类
  • 原文地址:https://www.cnblogs.com/ooooo/p/2245234.html
Copyright © 2011-2022 走看看