Home > Article > Backend Development > 这样做php数组为什么没有被改变?
<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 版本会为此发出一条警告。