के लिए सबसे अच्छा समाधान हमारे PHP5 ओओ अनुप्रयोग (आकार और यातायात दोनों में) बढ़ने के बाद, हमने __autoload() रणनीति पर फिर से विचार करने का निर्णय लिया।__autoload
हम हमेशा उस श्रेणी की परिभाषा द्वारा फ़ाइल का नाम देते हैं, इसलिए ग्राहक ग्राहक ग्राहक.php के भीतर निहित होगा। हम उन निर्देशिकाओं को सूचीबद्ध करते थे जिनमें फ़ाइल संभवतः मौजूद हो सकती है, जब तक कि सही .php फ़ाइल नहीं मिली।
यह काफी अक्षम है, क्योंकि आप संभावित रूप से कई निर्देशिकाओं के माध्यम से जा रहे हैं जिनकी आपको आवश्यकता नहीं है, और हर अनुरोध पर ऐसा करना (इस प्रकार, स्टेटस (लोड कॉल) लोड करना)।
समाधान है कि मेरे मन के लिए आते हैं ...
एक नामकरण परंपरा है कि (नाशपाती के समान) निर्देशिका का नाम तय प्रयोग। नुकसान: बहुत बड़ा पैमाने पर नहीं होता है, जिसके परिणामस्वरूप भयानक वर्ग के नाम होते हैं।
- किसी भी प्रकार की पूर्व-निर्मित सरणी के साथ परिणाम (प्रोपेल इसके __autoload के लिए करता है)। नुकसान: नए कोड के किसी भी तैनाती से पहले पुनर्निर्माण की आवश्यकता है।
- "फ्लाई पर" सरणी बनाएं और इसे कैश करें। यह सबसे अच्छा समाधान प्रतीत होता है, क्योंकि यह आपके द्वारा इच्छित किसी भी वर्ग के नाम और निर्देशिका संरचना की अनुमति देता है, और उस नई फाइलों में पूरी तरह से लचीला है, बस सूची में जोड़ा जाता है। चिंताओं हैं: इसे कहां स्टोर करना है और हटाए गए/स्थानांतरित फ़ाइलों के बारे में क्या है। भंडारण के लिए हमने एपीसी चुना है, क्योंकि इसमें डिस्क I/O ओवरहेड नहीं है। फ़ाइल हटाए जाने के संबंध में, इससे कोई फर्क नहीं पड़ता, क्योंकि आप शायद उन्हें कहीं भी वांछित नहीं करना चाहते हैं। चलने के लिए ... यह अनसुलझा है (हम इसे ऐतिहासिक रूप से अनदेखा करते हैं यह हमारे लिए अक्सर नहीं होता है)।
कोई अन्य समाधान?
ऑटोलोड के दो बड़े फायदे हैं 1) उन्हें उपयोग करने से पहले कक्षाओं को मैन्युअल रूप से लोड नहीं करना है और 2) फाइल सिस्टम में अपने स्थानों को हार्ड कोडिंग नहीं करना है। आपने दोनों को पूर्ववत कर दिया है। – Preston
यदि आपका प्रोजेक्ट कुछ कक्षाओं का उपयोग करता है तो आप सही हो सकते हैं, लेकिन बड़ी ओओ परियोजनाओं के लिए आपको दूसरे समाधान में जाना होगा। कल्पना करें कि एक विशाल ढांचे की सभी निर्देशिकाओं के माध्यम से एक वर्ग के लिए PHP खोज रहे हैं। बिना किसी प्रकार के आयात संकेतों के बहुत खराब। – azkotoki