doujie9882 2013-10-14 03:18
浏览 42
已采纳

通过引用修改数组的问题

In PHP, I have the following code (whittled down, to make it easier to read):

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);

At this point, I want $_SESSION to contain 'foo' => 'bar'. However, the $_SESSION variable is completely empty. Why is this the case? How can I store the $_SESSION variable as a property in order to later modify it by reference?

I have tried replacing __construct($arr) with __construct(&$arr), but that did not work.

  • 写回答

1条回答 默认 最新

  • douyouqian8550 2013-10-14 03:22
    关注

    You needed to take care of reference on every variable re-assignment you have.

    So the first place is __construct(&$arr)

    The second is $this->arr = &$arr;

    Then it should work.

    If you didn't put the & in the latter case - it would "make a copy" for the reference you passed in constructor and assign "a copy" to the $this->arr.

    PS: It's really weird to call parent constructor from non-constructor method

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 根据以下文字信息,做EA模型图
  • ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)
  • ¥15 关于并联谐振电磁感应加热
  • ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
  • ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
  • ¥60 关机时蓝屏并显示KMODE_EXCEPTION_NOT_HANDLED,怎么修?
  • ¥66 如何制作支付宝扫码跳转到发红包界面