2010-04-07 13 views
5

एक हेडर गार्ड के साथ सी-जैसे include का उपयोग करने के बजाय PHP के include_once या require_once का उपयोग करना अधिक कुशल है?PHP में एक बार

यानी,

include_once 'init.php'; 

बनाम

include 'init.php'; 

//contents of init.php 
if (!defined('MY_INIT_PHP')) { 
    define('MY_INIT_PHP', true); 
    ... 
} 

+5

क्या यह आपके कोड के प्रदर्शन में एक बाधा है? –

उत्तर

9

"requ_once" और "include_once" आमतौर पर थोड़ी धीमी होती है जो केवल "आवश्यकता" और "शामिल" होती है क्योंकि वे पहले से लोड हो चुके फ़ाइल को गीला कर देते हैं।

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

सबसे सरल अनुप्रयोगों में, सुविधाजनक कारणों के लिए requ_once/include_once का उपयोग करना बेहतर है।

हेडर गार्ड दृष्टिकोण केवल गन्दा कोड है जिसे टालना चाहिए। बस कल्पना करें, अगर आप उस फाइल को कई फाइलों में से एक में भूल गए हैं। डीबगिंग जो एक दुःस्वप्न हो सकता है।

यदि आपका एप्लिकेशन इसके लिए उपयुक्त है तो ऑटोलोडिंग का उपयोग करें। यह तेज़ और सबसे सुविधाजनक और साफ तरीका है।

+2

और '... परिभाषित (' MY_INIT_PHP ') ...' या तो लागत मुक्त नहीं है। तो प्रदर्शन प्रश्न "क्या आप php के आंतरिक समाधान से तेज़ी से php-script समाधान" है, और मुझे संदेह है कि सभी मामलों के विशाल बहुमत के लिए। – VolkerK

+1

@ वोल्करके हाँ, जो इसे भी जोड़ता है। व्याख्या किए गए PHP कोड में लिखा गया कोई भी समाधान PHP मूल मूल कार्यान्वयन की तुलना में परिभाषा धीमा है। कम से कम मैं कुछ अलग मामले के बारे में नहीं सोच सकता। – selfawaresoup

1

तुम एक टाइमर के साथ यह 10,000 गुना की कोशिश कर सकते हैं, लेकिन मुझे लगता है कि परिभाषित करने MY_INIT_PHP अतिसूक्ष्म तेज है।

ईमानदार होने के लिए, यह संभवतः इतना छोटा अंतर है कि जब तक आप फेसबुक जैसी साइटों के लिए काम नहीं कर रहे हैं, तब तक देखभाल करने की कोई व्यावहारिक आवश्यकता नहीं है।

0

यदि स्क्रिप्ट सामग्री अद्वितीय है तो मैं हमेशा REQUIRE_ONCE का उपयोग करता हूं।

+0

मैं भी हमेशा एक अलग कारण के लिए requ_once का उपयोग करता हूं ... फ़ाइल अनुपलब्ध होने पर requ_once घातक त्रुटि देगा, जबकि include_once केवल इस मामले में चेतावनी देता है। अन्यथा, ये दोनों बराबर हैं। – hongliang

2

मैं शामिल फ़ाइल के अंदर हेडर गार्ड का उपयोग करने में शामिल होने की अपेक्षा करता हूं, क्योंकि आपको अभी भी बाद में फ़ाइल खोलने और लोड करने की आवश्यकता है।

+0

आप सही हैं। उसे यह पूछना चाहिए था कि यह तेज़ है: अगर (! परिभाषित ('MY_INIT_PHP')) {परिभाषित करें ('MY_INIT_PHP', सत्य); 'init.php' शामिल करें;} – webbiedave

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