2012-01-09 23 views
11

Có cách nào để sử dụng các hàm array_merge(), array_pop(), .. để làm việc với ArrayAccess không?Arrayaccess và các hàm mảng bản địa php

Kể từ bây giờ, tôi đã thử giao diện Iterate__set_state() phương pháp ma thuật không thành công.

Lỗi được cung cấp: array_replace_recursive() [<a href='function.array-replace-recursive'>function.array-replace-recursive</a>]: Argument #1 is not an array.

Chỉ fo một kỷ lục, gettype() lợi nhuận objectis_array() lợi nhuận false và tôi usin php phiên bản 5.3.8

Trả lời

8

Thật không may, không có. Chúng chỉ hoạt động với kiểu mảng gốc. Bạn phải thêm các phương thức đó làm phương thức cho API công khai của đối tượng và triển khai chúng ở đó, ví dụ: một cái gì đó như thế này:

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

Suy nghĩ như vậy, nhưng chỉ trong trường hợp được yêu cầu. Ty – Kristian

+0

Tôi không hiểu câu trả lời này - bạn có nói rằng tôi sẽ cần phải thực hiện 'mảng_merge' và các hàm mảng gốc khác như các phương thức của lớp thực hiện' ArrayAccess' của tôi? – alexw

+0

@alexw có, bởi vì các chức năng này mong đợi mảng cho đầu vào. Một lớp thực hiện ArrayAccess không phải là kiểu giống như một mảng. – Gordon

Các vấn đề liên quan