2012-01-09 9 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

बस एक रिकार्ड के लिए, gettype() रिटर्न object और is_array() रिटर्न false और मैं PHP संस्करण 5.3.8

उत्तर

8

usin हूँ दुर्भाग्य से, नहीं। वे केवल मूल सरणी प्रकार के साथ काम करते हैं। आपको उन्हें अपने ऑब्जेक्ट के सार्वजनिक एपीआई में विधियों के रूप में जोड़ना होगा और उन्हें वहां लागू करना होगा, उदा। इस तरह कुछ:

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

ऐसा सोचा, लेकिन बस पूछे जाने पर। Ty – Kristian

+0

मुझे यह उत्तर नहीं समझा - क्या आप कह रहे हैं कि मुझे 'array_merge' और अन्य मूल सरणी कार्यों को मेरे' ArrayAccess'-कार्यान्वयन वर्ग के तरीकों के रूप में लागू करने की आवश्यकता होगी? – alexw

+0

@alexw हां, क्योंकि ये फ़ंक्शन इनपुट के लिए सरणी की अपेक्षा करते हैं। ArrayAccess को लागू करने वाला एक वर्ग सरणी के समान प्रकार नहीं है। – Gordon