2010-04-21 21 views
13

सरल प्रश्न: require_once वैश्विक का दायरा है?PHP में requ_once का दायरा क्या है?

उदाहरण के लिए:

<?PHP 

require_once('baz.php'); 

// do some stuff 
foo ($bar); 

function foo($bar) { 
    require_once('baz.php'); 
    // do different stuff 
} 

?> 

जब foo कहा जाता है, इसे फिर से पार्स baz.php करता है? या यह मुख्य php फ़ाइल से पहले से ही आवश्यक फ़ाइल पर भरोसा करता है (फ़ाइल के लिए लगातार दो बार requ_once को कॉल करने के समान) फ़ाइल शामिल है?

मैंने पहले इस सूत्र को देखा है, लेकिन यह काफी सवाल का जवाब नहीं दिया:

Should require_once "some file.php" ; appear anywhere but the top of the file?

आपकी मदद के लिए धन्यवाद!

उत्तर

6

require_once() मूल रूप से यह निर्धारित करने के लिए भौतिक फ़ाइल पर निर्भर करता है कि यह शामिल किया गया है या नहीं। तो यह इतना संदर्भ नहीं है कि आप require_once() पर कॉल कर रहे हैं, यह है कि भौतिक फ़ाइल पहले की आवश्यकता है या नहीं।

उपरोक्त आपके कोड में, foo() फ़ंक्शन baz.php को फिर से पार्स नहीं करेगा, क्योंकि यह पहले से ही जैसा था, जैसा कि वही फ़ाइल होगा।

हालांकि, आपको foo() के अंदर शामिल किया गया है या इसे शीर्ष पर शामिल किया गया है, इसके आधार पर आपको अलग-अलग परिणाम मिलेंगे, क्योंकि require_once() सफल होने पर स्कोपिंग लागू होगी।

+0

ग्रेट - आपके उत्तरों के लिए सभी को धन्यवाद! – TMG

2

अधिक जानकारी के लिए विशेष रूप से अपने प्रश्न का उत्तर दें, दूसरी बार जब आप उस फ़ाइल पर require_once पर कॉल करेंगे, तो यह कुछ भी नहीं करेगा, क्योंकि यह पहले से ही शामिल है।

यदि आपके इसमें शामिल फ़ंक्शंस इत्यादि हैं, तो आपके पास किसी फ़ंक्शन के अंदर भी समस्याएं होंगी, इसलिए दायरा अप्रासंगिक है। यदि यह केवल वैरिएबल को परिभाषित या संसाधित किया जा रहा है, तो आप require_once के बजाय require का उपयोग कर सकते हैं यदि आप इसे फिर से शामिल करना चाहते हैं, जिससे आपके दायरे में चर को फिर से परिभाषित किया जा सके।

5

ऐसा नहीं है। require_once की ट्रैकिंग अंदरूनी कार्यों पर लागू होती है।

a.php

<?php 
require_once('b.php'); 
function f() { require_once('b.php'); echo "inside function f;"; } 
?> 

b.php

<?php 
f(); 
?> 

b.php क्योंकि समारोह च() नहीं पूर्व परिभाषित किया गया है: हालांकि, निम्न स्क्रिप्ट एक त्रुटि पैदा करते हैं।

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