2

在 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)但这没有用。

4

1 回答 1

4

您需要注意您拥有的每个变量重新分配的参考。

所以第一个地方是__construct(&$arr)

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

然后它应该工作。

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

PS:从非构造方法调用父构造方法真的很奇怪

于 2013-10-14T03:22:27.200 回答