2009-09-10 12 views
6

php.net से:क्या PHP में ऑटोलोडिंग का उपयोग करना बुरा है?

PHP 5 में, यह कोई आवश्यकता नहीं है। आप __autoload() फ़ंक्शन को परिभाषित कर सकते हैं जिसे आप क्लास/इंटरफ़ेस का उपयोग करने का प्रयास कर रहे हैं, जिसे अभी तक परिभाषित नहीं किया गया है। इस फ़ंक्शन को कॉल करके स्क्रिप्टिंग इंजन को PHP को त्रुटि से विफल होने से पहले कक्षा लोड करने का आखिरी मौका दिया जाता है।

अब मैं जानना चाहता हूं, क्या गतिशील साइट पर उचित कक्षाओं को लोड करने के लिए पूरी तरह से __autoload का उपयोग करना बुरा व्यवहार है?

तरह से अपनी साइट सेटअप है

http://www.site.com/index.php?p=PAGE-I-WANT-TO-LOAD

तो अगर मैं मंचों अनुभाग या मेरी साइट के ब्लॉग खंड पर हूँ, मैं केवल उचित वर्गों और कार्यों के लिए चाहते हैं उदाहरण के लिए, index.php फ़ाइल में फ़ाइलों को शामिल करने के लिए है लोड किया जा सकता है, इसलिए मैं ऑटोलोड का उपयोग करता हूं लेकिन मैंने कभी भी फ़ाइल को मैन्युअल रूप से शामिल नहीं किया है, क्या मुझे अंतिम उपाय के रूप में __autoload का उपयोग करना चाहिए या क्या मैं उच्च ट्रैफिक सिस्टम पर भी ठीक कर रहा हूं?

उत्तर

8

खराब? सं। __autoload() PHP 5 के लिए मेरे पसंदीदा परिवर्धनों में से एक है। यह आपके आवेदन के लिए आवश्यक कक्षा फ़ाइलों को मैन्युअल रूप से शामिल/आवश्यक करने की ज़िम्मेदारी (और परेशानी) को हटा देता है। ऐसा कहा जा रहा है कि डेवलपर यह सुनिश्चित करने के लिए है कि केवल 'उपयुक्त वर्ग' लोड हो जाएं। यह आसानी से एक संरचित नामकरण योजना और निर्देशिका संरचना के साथ किया जाता है। __autoload() का सही तरीके से उपयोग करने के तरीके के बारे में ऑनलाइन बहुत सारे उदाहरण हैं, Google खोज करें और आपको बहुत सारी जानकारी मिल जाएगी।

+1

हाँ मैं यह पहले से ही उपयोग करते हैं, अगर यह एक प्रदर्शन उस पर भरोसा करने के लिए – JasonDavis

+2

@jason मारा है मैं पूछ रहा था: तुम शायद, जो आपके प्रश्न में स्पष्ट करना चाहिए क्योंकि आप प्रदर्शन के बारे में कुछ भी उल्लेख नहीं है अभी। –

+0

@musicfreak आप सही हैं, लेकिन अगर यह प्रदर्शन के लिए अच्छा नहीं था तो यह संभवतः "खराब अभ्यास" माना जाएगा – JasonDavis

8

Autoload केवल कक्षाओं की आवश्यकता है लोड करने का एक अच्छा तरीका है।

PHP 5> = 5.1.2 में, पुरानी __autoload() के साथ अधिकांश समस्याओं को असंतुष्ट, spl_autoload_register() के लिए धन्यवाद।

+1

मैंने अभी संदर्भित spl_autoload_register() पृष्ठ को देखा, मुझे वास्तव में यह समझ में नहीं आता है, क्या इसकी आवश्यकता है या बस इसका उपयोग कर रहा है बुनियादी __autoload समारोह ठीक है? – JasonDavis

+1

यदि आप एक से अधिक ऑटोलोडर चाहते हैं तो आपको spl_autoload_register का उपयोग करना होगा, यदि नहीं, तो __autoload ठीक ठीक करेगा। –

+0

spl_autoload_register() का मुख्य विक्रय बिंदु यह है कि एक क्लास लाइब्रेरी रनटाइम त्रुटि प्राप्त किए बिना, अपने स्वयं के ऑटोलोड लोड फ़ंक्शन को परिभाषित कर सकती है क्योंकि __autoload() को दो बार परिभाषित किया जाता है। – gnud

3

__autoload() के लिए एकमात्र खतरा यह है कि यदि आप एक खराब ऑटोलोडिंग फ़ंक्शन को परिभाषित करते हैं। आम तौर पर, आप प्रदर्शन प्रदर्शन हिट के मामले में प्राप्त करने जा रहे हैं, कुछ डिस्क की तलाश है क्योंकि PHP आपकी कक्षाओं वाली सही फ़ाइलों को ढूंढता है। उछाल उन सभी परेशान include() कॉल से छुटकारा पा रहा है।

यदि आप इस स्तर पर प्रदर्शन के बारे में चिंतित हैं, तो आप पहले ही एपीसी जैसे ऑपोड कैश का उपयोग कर रहे हैं।

+0

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

4

अब मैं जानना चाहता हूं, क्या गतिशील साइट पर उचित कक्षाओं को लोड करने के लिए पूरी तरह से __autoload का उपयोग करना बुरा व्यवहार है?

बिलकुल नहीं। आप ऑटोलोड पर भरोसा कर सकते हैं, आपको केवल एक अच्छा नामकरण सम्मेलन तैयार करना और एक कुशल ऑटोलोडर लागू करना है।

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

Autoloading कक्षाएं काम नहीं करेगा क्योंकि डिस्क पर फ़ाइल नाम समझ से परे वर्ग के नाम नहीं मेल खाते हैं:

यहाँ उपयोगकर्ता पुस्तिका Zend गार्ड से एक उद्धरण है।

+0

मैं वर्तमान में पहले से ही ऑटोलोड का उपयोग करता हूं, लेकिन यह एक अच्छा मुद्दा है कि यह ज़ेंड गार्ड के साथ काम नहीं कर रहा है जिसका मैं उपयोग नहीं करता लेकिन +1 के बारे में अभी भी जानना अच्छा है – JasonDavis

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