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

変数の再割り当てごとに参照を処理する必要がありました。

というわけで1位は__construct(&$arr)

2つ目は$this->arr = &$arr;

その後、動作するはずです。

後者の場合に を入れなかった&場合、コンストラクターで渡した参照の「コピーを作成」し、「コピー」を に割り当てます$this->arr

PS: 非コンストラクター メソッドから親コンストラクターを呼び出すのは本当に奇妙です

于 2013-10-14T03:22:27.200 に答える