Looking for php Keywords? Try Ask4Keywords

PHP संदर्भ द्वारा पास करें


उदाहरण

यह आपको किसी फ़ंक्शन या तत्व के संदर्भ में एक चर पास करने की अनुमति देता है जो आपको मूल चर को संशोधित करने की अनुमति देता है।

पासिंग-रेफरेंस केवल चरों तक सीमित नहीं है, निम्नलिखित को संदर्भ द्वारा भी पास किया जा सकता है:

  • नए कथन, उदाहरण के लिए foo(new SomeClass)
  • फ़ंक्शंस से लौटे संदर्भ

Arrays

"पासिंग-बाय-रेफरेंस" का एक सामान्य उपयोग एक सरणी के भीतर प्रारंभिक मानों को संशोधित करने के लिए नए सरणियों को बनाने या अपने नाम स्थान को लिटाने के बिना है। पासिंग-बाय-रेफरेंस उतना आसान है जितना कि पूर्ववर्ती / a & => &$myElement साथ वेरिएबल को प्रीफ़िक्स करना।

नीचे एक सरणी से एक तत्व का उपयोग करने और बस इसके प्रारंभिक मूल्य में 1 जोड़ने का एक उदाहरण है।

$arr = array(1, 2, 3, 4, 5);

foreach($arr as &$num) {
    $num++;
}

अब जब आप $arr भीतर किसी भी तत्व का उपयोग करते हैं, तो मूल तत्व को अपडेट किया जाएगा क्योंकि संदर्भ बढ़ा दिया गया था। आप इसे इसके द्वारा सत्यापित कर सकते हैं:

print_r($arr);

ध्यान दें

जब आप छोरों के संदर्भ में पासिंग का उपयोग करते हैं, तो आपको ध्यान देना चाहिए। उपरोक्त लूप के अंत में, $num अभी भी सरणी के अंतिम तत्व का संदर्भ रखता है। यह पोस्ट लूप असाइन करने से अंतिम सरणी तत्व में हेरफेर समाप्त हो जाएगा! आप यह सुनिश्चित कर सकते हैं कि यह परेशान न हो unset() 'आईएनजी इसे पोस्ट-लूप:

$myArray = array(1, 2, 3, 4, 5);

foreach($myArray as &$num) {
   $num++;
}
unset($num);

उपरोक्त यह सुनिश्चित करेगा कि आप किसी भी समस्या में नहीं चलेंगे। इस समस्या से संबंधित समस्याओं का एक उदाहरण StackOverflow पर इस प्रश्न में मौजूद है।


कार्य

गुजर-दर-संदर्भ के लिए एक और आम उपयोग कार्यों के भीतर है। मूल चर को संशोधित करना उतना ही सरल है:

$var = 5;
// define
function add(&$var) {
    $var++;
}
// call
add($var);

जिसे मूल प्रति के रूप में echo द्वारा सत्यापित किया जा सकता है।

echo $var;

फ़ंक्शंस के आसपास विभिन्न प्रतिबंध हैं, जैसा कि PHP डॉक्स से नीचे उल्लेखित है:

नोट: फ़ंक्शन कॉल पर कोई संदर्भ संकेत नहीं है - केवल फ़ंक्शन परिभाषाओं पर। अकेले फ़ंक्शन परिभाषाएँ संदर्भ द्वारा तर्क को सही ढंग से पारित करने के लिए पर्याप्त हैं। PHP 5.3.0 के अनुसार, आपको यह कहते हुए एक चेतावनी मिलेगी कि "कॉल-टाइम पास-बाय-रेफरेंस" का उपयोग करते समय पदावनत किया जाता है और आप फू (& $ a);; और PHP 5.4.0 के रूप में, कॉल-टाइम पास-बाय-संदर्भ हटा दिया गया था, इसलिए इसका उपयोग करने से एक घातक त्रुटि बढ़ जाएगी।