2013-10-14 129 views
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),但那不起作用。

+2

「但那不起作用。」 ---它實際上工作。但是,按照您的預期工作是不夠的。 – zerkms

+0

是否因爲你沒有將'$ arr'聲明爲'array()'?所以在你的'''Var''構造函數中,'$ this-> arr = $ array();' –

回答

4

您需要照顧參考您有變量重新分配。

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

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

那麼它應該工作。

如果您沒有在後一種情況下使用& - 它會爲您在構造函數中傳遞的引用「複製」併爲$this->arr分配「副本」。

PS:從非構造函數方法調用父構造函數真的很奇怪