2012-01-09 13 views
11

C'è un modo per utilizzare le funzioni array_merge(), array_pop(), .. per funzionare con ArrayAccess?Funzioni array array e nativo php

Da ora ho provato l'interfaccia Iterate e il metodo magico __set_state() senza successo.

Errore fornito: array_replace_recursive() [<a href='function.array-replace-recursive'>function.array-replace-recursive</a>]: Argument #1 is not an array.

Basta fo un record, gettype() rendimenti object e is_array() rendimenti false e sto Usin php versione 5.3.8

risposta

8

Purtroppo, no. Funzionano solo con il tipo di matrice nativa. Devi aggiungerli come metodi all'API pubblica del tuo oggetto e implementarli lì, ad es. qualcosa del genere:

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

Pensato così, ma nel caso richiesto. Ty – Kristian

+0

Non capisco questa risposta - stai dicendo che avrei bisogno di implementare 'array_merge' e altre funzioni di array nativi come metodi della mia classe di implementazione' ArrayAccess'? – alexw

+0

@alexw sì, perché queste funzioni prevedono array per l'input. Una classe che implementa ArrayAccess non è dello stesso tipo di una matrice. – Gordon