2010-07-26 8 views
8

मेरे पास एक ऐसी स्क्रिप्ट है जो autoload का उपयोग कक्षाओं को लोड करने के लिए करती है जो नहीं मिलती हैं। मैं जानबूझकर फ़ाइल को शामिल नहीं करता (हालांकि मैं कर सकता हूं) लेकिन मैं स्वत: लोड फ़ंक्शन को आवश्यक फ़ाइलों को शामिल करना चाहता हूं।PHP __autoload प्रदर्शन

क्योंकि स्क्रिप्ट पुनरावर्ती हो सकता है, वह यह है कि अगर वर्ग पहले से ही भरी हुई है, मैं इसी फ़ाइल लोड किया जाता है की जाँच करने के लिए और चाहते हैं class_exists स्क्रिप्ट में से प्रत्येक के प्रत्यावर्तन पर।

उत्तर

9

आप __autoload से बचना चाहते हैं, तो आप require_once बजाय include उपयोग कर सकते हैं।

__autoload का उपयोग करने का प्रदर्शन हिट काफी हो सकता है, खासकर क्योंकि कुछ ऑपोड कैश इसे ठीक से समर्थन नहीं करते हैं। हालांकि, यह बहुत आसान है, मैं इसका उपयोग तब तक कहूंगा जब तक आपका ऑपोड कैश ऑटोलोड में कैश न हो।

+1

मत भूलना 'include_once() 'भी है। – alex

+4

@alex मैं लोगों को 'शामिल' से अलग करना पसंद करता हूं जब तक कि बिल्कुल जरूरी नहीं है (और यह बहुत ही कम है)। एक ऐसा निर्माण होने के नाते जो फ़ाइल मौजूद नहीं है, चुपचाप विफल रहता है, यह मुझे जीवन के कुछ घंटों तक चुरा लिया है। – Artefacto

+0

@Atetefacto सहमत, बस सोचा कि मैं इसका जिक्र करूँगा। इसके अलावा, ओपोड कैश सामान उपयोगी है इसलिए +1 – alex

6

यदि आपके पास अपनी कक्षाओं को लोड करने के लिए आपके ऑटोलोडर सेट अप हैं और require (et al।) का उपयोग नहीं कर रहे हैं तो ऑटोलोडर केवल तभी कॉल किया जाएगा जब किसी वर्ग का संदर्भ दिया गया हो जो मौजूद नहीं है। तो ऑटोलोडर में class_exists को जांचने की आवश्यकता कभी नहीं है (यदि कक्षा मौजूद है तो इसे नहीं कहा जाएगा)। प्रदर्शन के संबंध में

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

+0

मैं autoload के अंदर class_exist का उपयोग करने के बारे में बात नहीं कर रहा था .. मेरा मतलब था कि अगर मैं ऑटोलोड लोड फ़ंक्शन का उपयोग नहीं करता तो मुझे क्लास तक पहुंचने से पहले क्लास_एक्सिस्ट का उपयोग करना पड़ता था, मेरा मतलब है कि मैं ऑटोलोड लोड मैन्युअल रूप से नहीं करूँगा जो क्लास नहीं करता अस्तित्व में कुछ फाइल शामिल नहीं है और फिर से प्रयास करने की कोशिश करें और जैसे ही स्क्रिप्ट रिकर्सिव होगी, मैं इसे पहले से लोड किए गए वर्गों के लिए भी वही चीज़ जांच रहा हूं। – CoCoMo

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