क्या PHP में __DIR__ और dirname (__ FILE__) में कोई अंतर है?


122

यह मेरे लिए समान दिखता है, लेकिन मुझे यकीन नहीं है,

क्योंकि वहाँ कई परियोजनाओं का उपयोग करता है dirname(__FILE__)

जवाबों:


189

उनका परिणाम बिल्कुल वैसा ही है ; इसलिए, उस पर कोई अंतर नहीं है।


उदाहरण के लिए, दो निम्नलिखित लाइनें:

var_dump(dirname(__FILE__));
var_dump(__DIR__);

क्या दोनों एक ही आउटपुट देंगे:

string '/home/squale/developpement/tests/temp' (length=37)


लेकिन, कम से कम दो अंतर हैं:

  • __DIR__केवल PHP> = 5.3 के साथ मौजूद है
    • जिसके कारण dirname(__FILE__)अधिक व्यापक रूप से इसका उपयोग किया जाता है
  • __DIR__संकलन-समय पर मूल्यांकन किया जाता है, जबकि dirname(__FILE__)फ़ंक्शन-कॉल का अर्थ है और निष्पादन-समय पर मूल्यांकन किया जाता है
    • हां, __DIR__है (या होना चाहिए) तेजी से।


संदर्भ के रूप में, मैनुअल के मैजिक कॉन्स्टेंट सेक्शन को देखें (उद्धृत) :

__DIR__: फ़ाइल की निर्देशिका।
यदि किसी शामिल के अंदर उपयोग किया जाता है, तो शामिल फ़ाइल की निर्देशिका वापस कर दी जाती है।
इसके बराबर है dirname(__FILE__)
जब तक यह रूट डायरेक्टरी नहीं है, तब तक इस निर्देशिका नाम में अनुगामी स्लैश नहीं है।
(PHP 5.3.0 में जोड़ा गया है।)


3
निश्चित नहीं है, लेकिन यह कुछ समय के लिए रहा है (मैनुअल के मैजिक कांस्टेंट पेज का कहना है कि इसका bahavior PHP 4.0.2 में संशोधित किया गया है; इसलिए मैं कहूंगा कि यह वहां पहले भी हो चुका है)
पास्कल मार्टिन

3
DIR और dirname ( FILE ) हमेशा आखिरी स्लैश को सही करते हैं?
nkkollaw

3
सही है, सिवाय इसके कि जब पूरा रास्ता "/" है, तो उस स्थिति में वे उस पर पट्टी नहीं करते हैं।
फ्रांसिस्को प्रेसेंसिया

1
मुझे यकीन नहीं है कि अगर मैं सही ढंग से समझ गया: dirname ( _FILE_ ) सबसे तेज़ है, है ना?
जियाको टेकी पिगानी

7
@GiacomoTecyaPigani नहीं, __DIR__तेज है।
निको
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.