有没有办法在类构造函数中使用“按引用传递”


Is there a way to use a 'pass by reference' in a class constructor?

我有一个包含多个公共函数的类,这些函数都与同一个$_SESSION索引/变量交互。与其在每次调用它们时都将该变量传递到每个函数中,我想简单地将其传递到类构造函数中,并让函数从$this->中获取它。

我正在尝试做的事情的示例:

$_SESSION['test'] = array('foo', 'bar');
class MyClass {
    // Pass by reference in ___construct arguments
    public function __construct(&$test_var) {
        $this->test_var = $test_var;
    }
    public function unset_foo() {
        unset($this->test_var[0]);
    }
}
$bar = new MyClass($_SESSION['test']);
$bar->unset_foo();
print_r($_SESSION['test']);

然后,结果应该是:

Array
(
    [1] => 'bar'
)

但这行不通。

有没有办法做到这一点?

你总是必须通过 ref:

在此行中,您不是通过引用进行分配,而是复制值:

    $this->test_var = $test_var;

只需在此处添加一个&,以便$this->test_var仍然保留对$_SESSION['test']的引用:

    $this->test_var = &$test_var;