2010-11-01 6 views
11

मैंने ArrayIterators से PHP SPL सीखना शुरू कर दिया है और मैं जानना चाहता हूं कि नियमित सरणी के बजाय एसपीएल ArrayObject, ArrayIterator, RecursiveArrayIterator का उपयोग करने के क्या फायदे हैं?नियमित सरणी के बजाय एसपीएल ऐरेऑब्जेक्ट, ऐरेइटरेटर, रिकर्सिवएरे इटरेटर का उपयोग करने के क्या फायदे हैं?

ए) मैंने सुना है कि एसपीएल इटरेटर्स का उपयोग करने वाले लूप स्मृति उपयोग को कम कर देंगे (लेकिन क्यों?)। मुझे वास्तव में यह विश्वास करने के लिए नहीं पता है या नहीं क्योंकि मुझे समझ में नहीं आता कि यह स्मृति उपयोग को कैसे कम कर सकता है।

बी) रिकर्सिवएर्रेइटरेटर के बारे में बात करते हुए हम कह सकते हैं कि कभी-कभी यह कोड की कुछ पंक्तियों को बचा सकता है (हम 2+ के बजाय एक foreach निर्माण का उपयोग कर रहे हैं (सरणी आयाम पर निर्भर करता है))।

शायद, मेरे प्रश्न किसी के लिए बहुत आसान लगते हैं, लेकिन एसपीएल के बारे में बहुत कम जानकारी/दस्तावेज हैं।

आप

+0

मेरा उत्तर पर्याप्त था? –

+0

संबंधित: [एसपीएल बनाम ऐरे: हमें एसपीएल का उपयोग कब करना चाहिए और हमें PHP में ऐरे का उपयोग कब करना चाहिए?] (Http://stackoverflow.com/questions/3166405/php-spl-vs-array-when-should-we -use-spl-and-when-we-use-array-in-php5) (जुलाई 2010) – hakre

उत्तर

8

प्राथमिक लाभ आप ज्यादातर पठनीयता के क्षेत्र में कुशल डाटा अभिगम पर देख रहे हैं धन्यवाद। इस तरह आप किसी फोरैच में सरणी की तरह ऑब्जेक्ट का उपयोग कर सकते हैं ताकि PHP के साथ एक करीबी बातचीत हो।

ए) जिस तरह से आप स्मृति उपयोग को कम करते हैं, वह सरणी की एक प्रति नहीं बना रहा है, लेकिन यदि इंजन में ठीक से किया जाता है तो यह सरणी संशोधित होने तक एक नया संदर्भ होना चाहिए, फिर यह वास्तव में कॉपी किया गया है।

ख) अनिवार्य रूप से

इस का एक अच्छा उदाहरण SimpleXML विस्तार होगा। जिस PHP/XML ऑब्जेक्ट के साथ आप बातचीत कर रहे हैं वह एक सरणी की तरह कार्य करता है जो इसे उपयोग करने में सक्षम बनाता है क्योंकि आप सूची में मौजूद तत्वों में से किसी एक को केवल प्रचार या एक्सेस कर सकते हैं। यदि आप टैग नाम या विशेषता चाहते हैं तो आपको ऑब्जेक्ट से एक सरणी पकड़ने की आवश्यकता नहीं है और उसके बाद फिर से शुरू करें और इसके साथ कुछ और करें।