Rumah  >  Artikel  >  pembangunan bahagian belakang  >  这样做php数组为什么没有被改变?

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

WBOY
WBOYasal
2016-06-06 20:37:17940semak imbas

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

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn