2012-01-09 25 views
11

有沒有辦法使用array_merge()array_pop() ..功能與了ArrayAccess工作?ArrayAccess接口和原生PHP數組功能

因爲現在我已經試過Iterate接口和__set_state()魔術方法沒有成功。

錯誤時給出:array_replace_recursive() [<a href='function.array-replace-recursive'>function.array-replace-recursive</a>]: Argument #1 is not an array

只是FO的記錄,gettype()回報objectis_array()回報false,我全光照PHP版本5.3.8

回答

8

不幸的是,沒有。它們只能使用本地數組類型。您必須將這些方法添加到您的對象的公共API並在其中實施,例如這樣的事情:

class YourClass implements ArrayAccess, Countable 
{ 
    public function pop() 
    { 
     $lastOffset = $this->count() - 1; 
     $lastElement = $this->offsetGet($lastOffset); 
     $this->offsetUnset($lastOffset); 

     return $lastElement; 
    } 

    public function mergeArray(array $array) { 
     // implement the logic you want 
    } 

    // other code … 
} 
+0

認爲如此,但以防萬一問。泰 – Kristian 2012-01-09 11:58:16

+0

我不明白這個答案 - 你是說我需要實現'array_merge'和其他本地陣列功能爲我的'ArrayAccess',實現類的方法呢? – alexw 2016-03-31 21:11:53

+0

@alexw是的,因爲這些函數需要輸入數組。實現ArrayAccess的類與數組的類型不同。 – Gordon 2016-04-01 05:11:11