2012-08-07 5 views
8

मुझे यकीन है कि मैंने PHP की एक नई सुविधा के बारे में कुछ समय पहले पढ़ा था जो या तो एक नया जादू विधि या एक नया इंटरफ़ेस था ताकि आप ऐरेरेबल विधियों को कार्यान्वित कर सकें।PHP एरेरेबल इंटरफ़ेस

जैसे

interface Arrayable 
{ 
    public function toArray(); 
} 

मैं इसे कल्पना थी?

+0

5.4 नहीं, और संभवतः आपका मतलब क्या नहीं है, लेकिन क्या यह था? http://php.net/manual/en/class.arrayaccess.php – Nanne

+2

अगर वे उस सुविधा को जोड़ना चाहते थे (और मैं मानता हूं कि यह अच्छा होगा ...), मुझे यकीन है कि वे इसे जादू के रूप में जोड़ देंगे विधि, जैसे __toArray()। उनमें से एक प्रतीत नहीं होता है :( – Corbin

+0

ऑरेअस का उपयोग ऑब्जेक्ट को सरणी की तरह व्यवहार करने के लिए किया जाता है। ToArray() ऑब्जेक्ट का एक सरणी के रूप में प्रतिनिधित्व करेगा। – gawpertron

उत्तर

5

क्या मैं इसे कल्पना कर रहा था?

हां।

  • किसी सरणी को कास्टिंग करने के लिए PHP के भीतर कोई इंटरफ़ेस (PHP 5.4 या अन्यथा) नहीं है।

  • PHP 5.4.0 ने JsonSerializable इंटरफ़ेस पेश किया, शायद आप इसके बारे में सोच रहे हैं?

  • आरएफसी (कई संबंधित में से एक) का मसौदा भी है जो __toArray() विधि का सुझाव देता है; देख Request for Comments: Scalar Type Casting Magic Methods

1

आप शायद iterator इंटरफ़ेस के बारे में सोच रहे हैं। यदि आप एक वर्ग बनाते हैं जो इसे लागू करता है तो आप इसे फिर से चालू कर सकते हैं जैसे कि यह एक सरणी है। उदाहरण के लिए, आप इसे foreach() लूप में उपयोग कर सकते हैं।

अन्य predefined interfaces पर भी एक नज़र डालें।

आप हमेशा अपना खुद का सरणी इंटरफ़ेस लिख सकते हैं और फिर आप इसके लिए संकेत टाइप कर सकते हैं या इसे instanceof (उदाहरण # 4 देखें) के साथ जांच सकते हैं जैसा कि आपने संकेत दिया था कि आप अपने comment में करना चाहते हैं।

+0

http : //www.php.net/manual/en/class.serializable.php का एक ही विचार है जो अराजक इंटरफेस के रूप में है। यह ऑब्जेक्ट ट्रैवर्सबल बनाने के बारे में नहीं है, लेकिन ऑब्जेक्ट के रूप में ऑब्जेक्ट के प्रतिनिधित्व को वापस करने में सक्षम है। – gawpertron

+0

या किसी सरणी यानी '$ foo = (array) $ arrayableObject' – gawpertron

+0

पर कास्टिंग टाइप करें, फिर बस एक toArray() विधि लिखें। आपको यह जानने के लिए सबसे अच्छा रखा जाता है कि आपकी ऑब्जेक्ट को सरणी के रूप में कैसे प्रदर्शित किया जाना चाहिए। मुझे नहीं लगता कि PHP आपके लिए अनुमान लगाने की उम्मीद की जा सकती है। – vascowhite

2

इस है (जो काफी बेकार है IMO) http://php.net/manual/en/class.traversable.php

और यह भी (जो काम में आता है, लेकिन हमेशा उपयोग करने से पहले एक प्रकार की जांच की आवश्यकता है)

http://php.net/manual/en/function.iterator-to-array.php

लेकिन ऑब्जेक्ट को सरणी रूपांतरण में संभाल करने का कोई तरीका नहीं है।

10

यह पीएचपी अपने आप में नहीं है, लेकिन Laravel ठीक उसी उद्देश्य के लिए है एक अंतरफलक है:

<?php namespace Illuminate\Contracts\Support; 

interface Arrayable { 

    /** 
    * Get the instance as an array. 
    * 
    * @return array 
    */ 
    public function toArray(); 

} 

नोट: Laravel में v4 नाम स्थान Illuminate\Support\Contracts था और इंटरफ़ेस नाम ArrayableInterface था।

+0

मैं एक देशी इंटरफेस की तरह सोच रहा था कि आप ऑब्जेक्ट को टाइप करने के लिए ऑब्जेक्ट टाइप कर सकते हैं i.e. 'array array = (array) $ ऑब्जेक्ट;' – gawpertron

+0

नेमस्पेस रोशनी \ Contracts \ Support; – ademin

संबंधित मुद्दे