这样做php数组为什么没有被改变?

原创
2016-06-06 20:37:17 650浏览

private function reset_config($conf,$set_conf= '')
    {
        $set_conf = & $set_conf == '' ? $this->config : $set_conf;
        foreach($conf as $key => $value)
        {
            if(isset($set_conf[$key]))
            {
                if(is_string($value))
                {
                    $set_conf[$key] = $value;
                }
                else if(is_array($value))
                {
                    $set_conf[$key] = $this->reset_config($value,$set_conf[$key]);
                }
            }
        }
    }

$this->config是当前函数所在类的一个多维配置数组,希望通过传入一个数组$conf来覆盖可能需要改变的值,但是函数调用之后$this->config数组的值依然没有改变,不知是不是引用传值没用呢?

回复内容:

private function reset_config($conf,$set_conf= '')
    {
        $set_conf = & $set_conf == '' ? $this->config : $set_conf;
        foreach($conf as $key => $value)
        {
            if(isset($set_conf[$key]))
            {
                if(is_string($value))
                {
                    $set_conf[$key] = $value;
                }
                else if(is_array($value))
                {
                    $set_conf[$key] = $this->reset_config($value,$set_conf[$key]);
                }
            }
        }
    }

$this->config是当前函数所在类的一个多维配置数组,希望通过传入一个数组$conf来覆盖可能需要改变的值,但是函数调用之后$this->config数组的值依然没有改变,不知是不是引用传值没用呢?

把foreach循环里的$value变量改为&$value试一下
另外该方法里的第一行:

    $set_conf = & $set_conf == '' ? $this->config : $set_conf;

这里的 = & 没有看懂是什么意思!

private function reset_config($conf,&$set_conf= '')

这么做,会将$set_conf的引用传进来,修改也就会修改本身

把&放到参数那边去

问题出在三元运算符那里,手册中有说明:
Note: 注意三元运算符是个语句,因此其求值不是变量,而是语句的结果。如果想通过引用返回一个变量这点就很重要。在一个通过引用返回的函数中语句 return $var == 42 ? $a : $b; 将不起作用,以后的 PHP 版本会为此发出一条警告。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。