2012-08-07 30 views
11

fopen का उपयोग करने के पेशेवर और विपक्ष क्या हैं SplFileObject PHP में?PHP में स्प्लिफ़ाइल ऑब्जेक्ट बनाम फॉपेन

जो मैं देखता हूं, SplFileObject अपवादों को फेंक देता है जो try...catch त्रुटि प्रबंधन के लिए उपयोग करते समय यह सुविधाजनक बनाता है। इसके अलावा, क्या दूसरे पर एक की सिफारिश करने के कोई अन्य कारण हैं?

(बोनस: क्यों यह SplFileObject कहा जाता है के लिए Spl स्टैंड क्या करता है क्यों नहीं बस FileObject??)

अद्यतन:SplFileObject की एक सीमा है कि यह एक close सदस्य नहीं है (अभी तक) है समारोह। कुछ स्थितियों में यह एक समस्या हो सकती है (उदाहरण: Unlink and SplFileObject)।

+2

आप यहां [spl] टैग का उपयोग करना चाहेंगे। जो लोग इसका अनुसरण करते हैं वे आमतौर पर बहुत उत्साही और जानकार होते हैं। – goat

+0

@rambocoder हो गया –

उत्तर

1

स्प्ल PHP में एक मानक लाइब्रेरी है जो बहुत अच्छी चीजें बनाती है।

एक SplfileObject का उपयोग करने का एक अच्छा कारण यह है कि यह आपके कोड ऑब्जेक्ट ओरिएंटेड बनाता है। यदि आप चाहते हैं, तो आप कक्षा को अपने कोड बेस में बढ़ा सकते हैं और फाइलों का उपयोग करते समय इसे कुछ अच्छी चीजें कर सकते हैं, पहले से ही मूलभूत ढांचे के साथ।

4

स्प्ल मानक PHP लाइब्रेरी के लिए खड़ा है।

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

मुख्य प्रश्न यहाँ तुम क्या चाहते है अपने कोड के साथ प्राप्त करने के लिए - क्या आपको एक बार एक फ़ाइल खोलने की ज़रूरत है, इसे डेटा पढ़ें और फिर इसके साथ काम करें या आपको एक (या इससे भी अधिक) फ़ाइलों के साथ और अधिक जटिल सामग्री करने की आवश्यकता है।

+0

मेरे पास मेरे प्रोजेक्ट में यह एक पृष्ठ है जहां मैं एक CSV फ़ाइल लोड करता हूं और डेटाबेस को पॉप्युलेट करता हूं। मैं त्रुटि प्रबंधन के लिए प्रत्येक पृष्ठ में 'कोशिश करें ... पकड़' का उपयोग कर रहा हूं। क्या मैं यह सोचने में सही हूं कि 'SplFileObject' यहां एक अच्छी पसंद है? –

+2

मैं इसे व्यक्तिगत रूप से उस डेटा के लिए पसंद करूंगा जिसे आप अपने डेटाबेस में रखना चाहते हैं, क्योंकि आप बेहतर त्रुटि प्रबंधन कर सकते हैं, इसलिए मैं इस सामान्य सेटिंग में खुद के लिए जाऊंगा, क्योंकि मैं त्रुटियों को लॉग करना चाहता हूं, आदि। हालांकि , यदि आप फ़ाइल इनपुट के बारे में सुनिश्चित हो सकते हैं (टूटा नहीं, स्वचालित स्रोत से, आदि) तो आप शायद 'fgetscsv' के लिए जा सकते हैं – Florian

14

एसपीएल मानक PHP लाइब्रेरी के लिए खड़ा है।

SplFileObject आंतरिक रूप से fopen के साथ बनाए गए स्ट्रीम संसाधन का उपयोग करता है। तो आपका प्रश्न यह होना चाहिए कि SplFileObject का उपयोग करना या स्ट्रीम संसाधन के साथ सीधे काम करना दिलचस्प क्यों है?

SplFileObject पेशेवरों:

  • SplFileObject हेरफेर फाइल करने के लिए एक OOP दृष्टिकोण प्रदान (fread पीएचपी 5.5.11 में जोड़ा गया है, fputcsv पीएचपी 5.4 में जोड़ा गया)।

  • SplFileObject आपकी फ़ाइल को बेहतर तरीके से कुशल बनाने के लिए अन्य SPL Iterator के उपयोग को सक्षम करने के लिए कई उपयोगी PHP इंटरफेस लागू करता है।

SplFileObject मुख्य नुकसान है कि वह अपने आंतरिक धारा संसाधन के लिए उपयोग नहीं देता है। PHP फ़ंक्शन मूल रूप से स्ट्रीम संसाधन के साथ सीधे काम करने के लिए बनाए गए थे। तथ्य यह है कि SplFileObject अपने स्वयं के आंतरिक धारा संसाधन के लिए उपयोग नहीं देता है यह कई पीएचपी कार्यों में बनाया के साथ व्यर्थ:

  • php stream filters उपयोग SplFileObject साथ गरीब है।आपको php://filter मेटा रैपर पर निर्भर होना चाहिए, जो उनकी उपयोगिता को सीमित करता है।

  • cURL साथ SplFileObject का उपयोग कर

यह निष्कर्ष निकालने के लिए ऊपर SplFileObject और एक धारा संसाधन परस्पर विनिमय नहीं कर रहे हैं संभव नहीं है। SplFileObject का उपयोग किया कुछ भी एक धारा संसाधन और एक SplFileObject userland कार्यान्वयन का प्रयोग कर प्राप्त किया जा सकता है, लेकिन रिवर्स सही नहीं है।

तो fopen द्वारा बनाए गए स्ट्रीम संसाधन का उपयोग कर उपयोग मामले के आधार पर SplFileObject पर निर्भर होने से बेहतर विकल्प हो सकता है।

करीबी विधि के लिए, आपको एक की आवश्यकता नहीं है ... आपको केवल आंतरिक स्ट्रीम संसाधन को रिलीज़/बंद करने के लिए हैंडलर को शून्य पर सेट करने की आवश्यकता है।

$file = new SplFileObject('/path/to/my/file'); //the file handler is created 
$file = null; //the file handler is closed