2012-07-07 17 views
19

मैं मानक PHP लाइब्रेरी (एसपीएल) की जांच कर रहा हूं। मैंने पहले केवल सरणी का उपयोग किया और अभी पाया कि PHP में इतने सारे मानक वर्ग हैं। लेकिन मैन्युअल में कोई भी शब्द नहीं है कि इसका उपयोग करने की सिफारिश की जाती है या नहीं। उदाहरण के लिए, वे स्पष्ट रूप से foreach निर्माण को पुनरावृत्त करने के लिए अनुशंसा करते हैं क्योंकि यह तेज़ है। और इस पुस्तकालय के बारे में क्या? अगर मुझे किसी ऑब्जेक्ट में कुछ डेटा स्टोर करने की ज़रूरत है, तो क्या मुझे अपनी स्थिति के लिए कुछ ठोस एसपीएल कक्षा का उपयोग करना चाहिए या मानक सरणी का उपयोग करना बेहतर है?PHP एसपीएल, क्या इसका उपयोग करने योग्य या कच्चे सरणी कार्य बेहतर हैं?

+1

यदि आप किसी ऑब्जेक्ट में डेटा संग्रहीत करते हैं, तो आप ArrayAccess या ArrayIterator को लागू करके ऑब्जेक्ट पर फिर से सक्रिय कर सकते हैं, लेकिन अंतर्निहित डेटा अभी भी एक सादे पुराने PHP सरणी में संग्रहीत है। नियमित सरणी ठीक है, अगर आप किसी ऑब्जेक्ट में डेटा स्टोर करना चाहते हैं, तो अपने विवेकानुसार [Iterators] (http://www.php.net/manual/en/spl.iterators.php) को कार्यान्वित करें। – drew010

उत्तर

28

आपके प्रश्न के लिए बहुत कुछ है। क्या आप एसपीएल डेटा संरचनाओं का उपयोग करना चाहिए? निर्भर करता है।

PHP सरणी मानचित्र, एक लिंक की गई सूची या सरणी के रूप में कार्य कर सकती है। बहुत ही कम आप वास्तव में एक डेटा प्रकार चाहते हैं जो उन सभी चीजों के रूप में कार्य करता है, इसलिए एसपीएल डेटा प्रकारों की केंद्रित प्रकृति इतनी सीमित नहीं है। वास्तव में, अधिकांश "बाहरी" (और कुछ "अंदरूनी") PHP की सरणी को एक झगड़ा मानेंगे।

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

आम तौर पर, मुझे नहीं लगता कि कई लोग एसपीएल डेटा संरचनाओं का उपयोग करते हैं। ज्यादातर, मुझे लगता है, क्योंकि PHP और वेब अनुप्रयोगों के संदर्भ में वे आम तौर पर बहुत लागू नहीं होते हैं। आप आमतौर पर छोटे सरणी से निपट रहे हैं, जहां ऑपरेटर और सरणी कार्यों में निर्मित की सुविधा एसपीएल प्रकारों के किसी भी फायदे से अधिक है।

कहा:

  • आप एक स्थिति में अपने आप को मिल जाए, जहाँ आप (बीच में को हटाने डालने /) एक लिंक्ड सूची के रूप में एक सरणी का उपयोग कर रहे हैं, तो एसपीएल दोगुना जुड़ा हुआ सूचियों में से एक का प्रयास करें।

  • यदि आप स्वयं को एक बड़ी अनुक्रमित सरणी का उपयोग करते हुए पाते हैं, तो SPLFixedArray आज़माएं। वे निश्चित रूप से बहुत कम स्मृति का उपभोग करेंगे।

  • यदि आपको कुंजी के रूप में ऑब्जेक्ट्स के साथ नक्शा रखने की आवश्यकता है, तो SplObjectStorage का उपयोग करें (क्योंकि PHP सरणी ऑब्जेक्ट कुंजी के साथ काम नहीं करती है)।

  • यदि आप किसी सरणी में आदेश दिया गया डेटा रखना चाहते हैं, तो ढेर में से एक आज़माएं।

बेंचमार्क देशी सरणी बनाम एसपीएल वस्तु और उपयोग जो भी स्मृति + गति + सादगी दुविधा यह है कि आप सूट है।

+1

+1, लेकिन मैं अपने लिए कहूंगा, मैं हमेशा मूल php arrays की तरफ झुकता हूं क्योंकि उनके पास शानदार भाषा एकीकरण है और सभी PHP के अद्भुत सरणी कार्यों के साथ काम करता है। स्प्ल अक्सर php में एक मिस्फीट की तरह लगता है। – goat

+0

मैं मानता हूं कि ये डेटा संरचनाएं एक थके हुए अंगूठे की तरह चिपक जाती हैं। मैं आमतौर पर केवल डेटा का क्रंच करते समय उनका उपयोग करता हूं (और फिर भी, PHP भाषा की मेरी पहली पसंद नहीं है) या जब मुझे संदर्भ द्वारा सरणी पास करने की आवश्यकता होती है। – Matthew