在 PHP 中,我有以下代码(经过精简,以便于阅读):
class Var {
public $arr;
function __construct($arr) {
$this->arr = $arr;
}
function set($k, $v) {
$this->arr[$k] = $v;
}
}
class Session extends Var {
function __construct() {}
function init() {
session_start();
parent::__construct($_SESSION);
}
}
$s = new Session();
$s->init();
$s->set('foo', 'bar');
var_dump($_SESSION);
此时,我希望 $_SESSION 包含 'foo' => 'bar'
。然而,$_SESSION 变量完全是空的。为什么会这样呢?如何将 $_SESSION 变量存储为属性,以便以后通过引用对其进行修改?
我尝试用 __construct(&$arr)
替换 __construct($arr)
,但这不起作用。
最佳答案
您需要注意每个变量重新分配的引用。
所以第一个地方是__construct(&$arr)
第二个是$this->arr = &$arr;
然后它应该可以工作。
如果您没有在后一种情况下放置 &
- 它将为您在构造函数中传递的引用“制作一个副本”,并将“副本”分配给 $this ->arr
.
PS:从非构造函数方法调用父构造函数真的很奇怪
关于php - 通过引用修改数组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19353017/