php - 通过引用修改数组的问题

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

最佳答案

您需要注意每个变量重新分配的引用。

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

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

然后它应该可以工作。

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

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

关于php - 通过引用修改数组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19353017/

相关文章:

php - 如何在单个查询中使用 While 循环编写多个查询?

php - 如何在php中根据 session 显示菜单?

ajax - Laravel session 未通过 AJAX 请求更新

c++ - .net 中的静态链接是不可能的吗?你能用 C++/CLI 写一个包装器吗?

c++ - 引用重新分配

JAVA java.lang.reflect.Constructor 无法调用 Date 构造函数

php - 如何将可变数据从数组传递到php中的fpdf

php - 在php中显示获取mysql数据的结果

javascript - 在 Laravel Blade 中的 foreach 循环上使用 javascript 函数

php - session Cookie 与持久性 Cookie