>  기사  >  백엔드 개발  >  这样做php数组为什么没有被改变?

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

WBOY
WBOY원래의
2016-06-06 20:37:17912검색

<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 版本会为此发出一条警告。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.