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一样?
使用引用参数是不够的。你需要设置你的 $this->o
到实际的参照物 $o
:
$this->o = &$o;
当你把值传递给变量时,必须在构造函数中指定对参数的引用。
function __construct(&$o) {
$this->o = &$o;
}
输出。
echo json_encode($a->o); // { "hello": "world", "foo": 1 }
echo json_encode($o); // { "hello": "world", "foo":1 }