2012-06-18 11 views
24
function parts($part) { 
    $structure = 'http://' . $site_url . 'content/'; 
    echo($tructure . $part . '.php'); 
} 

बाहर एक चर $site_url है कि इस पेज के शीर्ष पर परिभाषित किया गया था का उपयोग करता है, लेकिन इस चर समारोह में पारित नहीं किया जा रहा है समारोह उपयोग चर।PHP से इस समारोह

हम इसे फ़ंक्शन में वापस करने के लिए कैसे प्राप्त करते हैं?

उत्तर

51

दूसरा पैरामीटर

आप अपने कार्य करने के लिए अतिरिक्त पैरामीटर पास करनी होगी जोड़ें: बंद के मामले में

function parts($site_url, $part) { 
    $structure = 'http://' . $site_url . 'content/'; 
    echo $structure . $part . '.php'; 
} 

आप बल्कि तो बंद का उपयोग करेंगे, तो आप कर सकते हैं मौजूदा चर के लिए आयात चर (use कीवर्ड):

$parts = function($part) use ($site_url) { 
    $structure = 'http://' . $site_url . 'content/'; 
    echo $structure . $part . '.php'; 
} 

global - एक बुरा व्यवहार

इस पोस्ट में अक्सर पढ़ने के लिए है, इसलिए कुछ global के बारे में स्पष्ट किया जाना चाहिए। इसका उपयोग करना एक बुरा अभ्यास माना जाता है (this और this देखें)।

पूर्णता खातिर यहां के लिए समाधान global उपयोग कर रहा है:

function parts($part) { 
    global $site_url; 
    $structure = 'http://' . $site_url . 'content/'; 
    echo($structure . $part . '.php'); 
} 

यह काम करता है क्योंकि आप दुभाषिया है कि आप एक वैश्विक चर का उपयोग करना चाहते बताने के लिए है, अब यह सोचता यह एक स्थानीय चर है (भीतर आपका काम)।

सुझाई पढ़ने:

0

बस समारोह में डाल: वैश्विक $ SITE_URL;

34

वैकल्पिक रूप से, आप use कीवर्ड के साथ बंद करके उपयोग करके बाहरी दायरे में चर ला सकते हैं।

$myVar = "foo"; 
$myFunction = function($arg1, $arg2) use ($myVar) 
{ 
return $arg1 . $myVar . $arg2; 
}; 
+1

इस तरह थोड़ा कठिन है, उदाहरण के लिए यदि आपके पास 10 चर है तो यह कठिन होगा। – M98

+1

PHP त्रुटि दिखाता है, क्यों? पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित 'उपयोग' (T_USE), '{ – M98

+1

@Kermani की अपेक्षा करते हुए आप शायद PHP के पुराने संस्करण का उपयोग कर रहे हैं जिसमें' उपयोग 'वाक्यविन्यास नहीं है। यह वाक्यविन्यास PHP5.3 में पेश किया गया था। Https://wiki.php.net/rfc/closures –

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