परिचय
PHP में, किसी फ़ंक्शन के तर्कों को मान द्वारा पारित किया जा सकता है या संदर्भ द्वारा पारित किया जा सकता है। डिफ़ॉल्ट रूप से, वास्तविक तर्कों के मान औपचारिक तर्कों के लिए मूल्य द्वारा पारित किए जाते हैं जो फ़ंक्शन के अंदर स्थानीय चर बन जाते हैं। इसलिए, इन चरों में संशोधन वास्तविक तर्क चर के मान को नहीं बदलता है।
जब तर्कों को संदर्भ द्वारा पारित किया जाता है, औपचारिक तर्क के मूल्य में परिवर्तन वास्तविक तर्क चर में परिलक्षित होता है क्योंकि पूर्व उत्तरार्द्ध का संदर्भ है। इस प्रकार संदर्भ तंत्र से गुजरना वैश्विक अंतरिक्ष में डेटा में अप्रत्यक्ष रूप से हेरफेर करने में मदद करता है। यह इस तथ्य पर काबू पाने में भी मदद करता है कि एक फ़ंक्शन केवल एक चर लौटा सकता है।
मूल्य से गुजरें
निम्नलिखित उदाहरण में, दो चर स्वैप () फ़ंक्शन में पास किए गए हैं। भले ही स्वैपिंग मैकेनिज्म फ़ंक्शन के अंदर होता है, लेकिन यह वेरिएबल के मानों को नहीं बदलता है जो पारित किए गए थे
उदाहरण
<?php function swap($arg1, $arg2){ echo "inside function before swapping: arg1=$arg1 arg2=$arg2\n"; $temp=$arg1; $arg1=$arg2; $arg2=$temp; echo "inside function after swapping: arg1=$arg1 arg2=$arg2\n"; } $arg1=10; $arg2=20; echo "before calling function : arg1=$arg1 arg2=$arg2\n"; swap($arg1, $arg2); echo "after calling function : arg1=$arg1 arg2=$arg2\n"; ?>
आउटपुट
यह उदाहरण निम्न आउटपुट देता है
before calling function : arg1=10 arg2=20 inside function before swapping: arg1=10 arg2=20 inside function after swapping: arg1=20 arg2=10 after calling function : arg1=10 arg2=20
संदर्भ द्वारा पास करें
संदर्भ द्वारा तर्क प्राप्त करने के लिए, उपयोग किए गए चर औपचारिक तर्क को और प्रतीक द्वारा उपसर्ग किया जाना चाहिए। यह फ़ंक्शन को कॉल करने के लिए उपयोग किए जाने वाले चर का संदर्भ देता है। इसलिए, फ़ंक्शन के अंदर की अदला-बदली का परिणाम उन मूल चरों में भी दिखाई देगा जो पारित किए गए थे
उदाहरण
<?php function swap(&$arg1, &$arg2){ echo "inside function before swapping: arg1=$arg1 arg2=$arg2\n"; $temp=$arg1; $arg1=$arg2; $arg2=$temp; echo "inside function after swapping: arg1=$arg1 arg2=$arg2\n"; } $arg1=10; $arg2=20; echo "before calling function : arg1=$arg1 arg2=$arg2\n"; swap($arg1, $arg2); echo "after calling function : arg1=$arg1 arg2=$arg2\n"; ?>
आउटपुट
अदला-बदली का परिणाम इस प्रकार दिखाया जाएगा
before calling function : arg1=10 arg2=20 inside function before swapping: arg1=10 arg2=20 inside function after swapping: arg1=20 arg2=10 after calling function : arg1=20 arg2=10
निम्नलिखित उदाहरण में, सरणी तत्व सरणी आरंभीकरण से पहले घोषित व्यक्तिगत चर के संदर्भ हैं। यदि तत्व को संशोधित किया जाता है, तो चर का मान भी बदल जाता है
उदाहरण
<?php $a = 10; $b = 20; $c=30; $arr = array(&$a, &$b, &$c); for ($i=0; $i<3; $i++) $arr[$i]++; echo "$a $b $c"; ?>
आउटपुट
$a, $b और $c के मान भी बढ़ जाते हैं
11 21 31
किसी सरणी को किसी फ़ंक्शन के संदर्भ में पास करना भी संभव है
उदाहरण
<?php function arrfunction(&$arr){ for ($i=0;$i<5;$i++) $arr[$i]=$arr[$i]+10; } $arr=[1,2,3,4,5]; arrfunction($arr); foreach ($arr as $i) echo $i . " "; ?>
आउटपुट
संशोधित सरणी निम्नानुसार प्रदर्शित की जाएगी
11 12 13 14 15
वस्तु और संदर्भ
PHP में, वस्तुओं को डिफ़ॉल्ट रूप से संदर्भों द्वारा पारित किया जाता है। जब किसी वस्तु का संदर्भ बनाया जाता है, तो उसका संदर्भ भी तर्क के रूप में $this के रूप में भेजा जाता है जो कि पहली वस्तु का भी संदर्भ होता है
उदाहरण
<?php class test1{ private $name; function getname(){ return $this->name; } function setname($name){ $this->name=$name; } } $obj1=new test1(); $obj2=&$obj1; $obj1->setname("Amar"); echo "name: " .$obj2->getname(); ?>
आउटपुट
उपरोक्त कोड निम्न आउटपुट प्रदर्शित करेगा
name: Amar