通过引用修改数组的问题

时间:2013-10-14 03:18:51

标签: php session reference pass-by-reference

在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),但这不起作用。

1 个答案:

答案 0 :(得分:4)

您需要对每个变量重新分配进行参考。

所以首先是__construct(&$arr)

第二个是$this->arr = &$arr;

然后它应该工作。

如果你没有将&放在后一种情况下 - 它将为你在构造函数中传递的引用“复制”并将“副本”分配给$this->arr

PS:从非构造函数方法

调用父构造函数真的很奇怪