2012-01-09 8 views
11

Czy istnieje sposób użycia funkcji array_merge(), array_pop(), .. do pracy z ArrayAccess?Arrayaccess i natywne funkcje macierzy php

Od tej pory próbowałem interfejs Iterate i __set_state() magicznej metody bez powodzenia.

Wystąpił błąd: array_replace_recursive() [<a href='function.array-replace-recursive'>function.array-replace-recursive</a>]: Argument #1 is not an array.

Wystarczy fo rekordu, gettype() powraca object i is_array() powraca false i jestem usin Wersja PHP 5.3.8

Odpowiedz

8

Niestety, nie. Działają tylko z rodzimym typem tablicy. Trzeba je dodać jako metody do publicznego interfejsu API obiektu i zaimplementować je tam, np. coś takiego:

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

Tak myślałem, ale na wszelki wypadek. Ty – Kristian

+0

Nie rozumiem tej odpowiedzi - czy mówisz, że będę musiał zaimplementować funkcje 'array_merge' i inne funkcje macierzystej tablicy jako metody mojej klasy implementującej' ArrayAccess'? – alexw

+0

@alexw tak, ponieważ te funkcje oczekują tablic na dane wejściowe. Klasa implementująca ArrayAccess nie jest tego samego typu co tablica. – Gordon

Powiązane problemy