Home  >  Article  >  Backend Development  >  这样做php数组为什么没有被改变?

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

WBOY
WBOYOriginal
2016-06-06 20:37:17940browse

<code>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]);
                }
            }
        }
    }
</code>

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

回复内容:

<code>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]);
                }
            }
        }
    }
</code>

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

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

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

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

<code>private function reset_config($conf,&$set_conf= '')
</code>

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

把&放到参数那边去

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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn