2015-10-02 112 views
0

有沒有一種方法來實現多維數組訪問的類?我想是這樣Multidimensional ArrayObject

$obj = new MultiArrayObject(); 
$obj['key']['subkey'] = 'test'; 
echo $obj['key']['subkey']; //expect 'test' here 
+0

這就是默認的'Array'行爲。你想做什麼? – Phylogenesis

+0

我想實現'Session'類,它將把數據放到Redis存儲中,並從那裏獲取它。就像通常的'$ _SESSION'變量一樣,但具有其他功能,如'session_start()'調用。 –

+0

''ArrayObject'不會像使用_多維數組_時那樣_完全沒有任何額外的編碼。也許有趣? [PHP ArrayAccess set multidimensional](http://stackoverflow.com/questions/29459399/php-arrayaccess-set-multidimensional/29496048#29496048)。我懷疑'ArrayObject'可以訪問很多'內部PHP數組',並免費提供它? –

回答

1

沒有語法與一類可以攔截水平的數組訪問,但是你可以通過implementing the ArrayAccess interface在同一時間做一層:

class MultiArrayObject implements ArrayAccess { 

    protected $data = []; 

    public function offsetGet($offset) { 
     if (!array_key_exists($offset, $this->data)) { 
      $this->data[$offset] = new $this; 
     } 
     return $this->data[$offset]; 
    } 

    /* the rest of the ArrayAccess methods ... */ 

} 

這隻要您訪問$obj['key'],就會創建並返回一個新的嵌套MultiArrayObject,您可以在其中設置數據。

但是,這不會讓你區分setter和getters;只要你訪問它們,所有的值都將被隱含地創建,這可能會使這個對象的行爲有點奇怪。

+0

如何在這裏實現'offsetSet()'? –

+0

'$ this-> data [$ offset] = $ value;'...!? – deceze