可变参考范围

问题描述 投票:1回答:2
class A {
  public $o;
  function __construct(&$o) {
    $this->o = $o;
  }
  function set($v) {
    $this->o["foo"] = $v;
  }
}

$o = ["hello" => "world"];
$a = new A($o);
$a->set(1);

echo json_encode($a->o)  // { "hello": "world", "foo": 1 }
echo json_encode($o)  // { "hello": "world" }

我必须怎么做才能让输出#2和输出#1一样?

php pass-by-reference
2个回答
1
投票

使用引用参数是不够的。你需要设置你的 $this->o 到实际的参照物 $o:

$this->o = &$o;

1
投票

当你把值传递给变量时,必须在构造函数中指定对参数的引用。

function __construct(&$o) {
  $this->o = &$o;
}

输出。

echo json_encode($a->o);  // { "hello": "world", "foo": 1 }
echo json_encode($o);  // { "hello": "world", "foo":1 }
© www.soinside.com 2019 - 2024. All rights reserved.