परिचय
PHP में, फ़ंक्शन के आर्गुमेंट्स को मान द्वारा या रेफरेंस द्वारा पास किया जा सकता है। डिफ़ॉल्ट रूप से, वास्तविक आर्गुमेंट्स के मान औपचारिक आर्गुमेंट्स को मान द्वारा पास किए जाते हैं जो फ़ंक्शन के अंदर स्थानीय वेरिएबल्स बन जाते हैं। इसलिए, इन वेरिएबल्स में संशोधन वास्तविक आर्गुमेंट वेरिएबल के मान को नहीं बदलता।
जब आर्गुमेंट्स रेफरेंस द्वारा पास किए जाते हैं, तो औपचारिक आर्गुमेंट के मान में परिवर्तन वास्तविक आर्गुमेंट वेरिएबल में प्रतिबिंबित होता है क्योंकि पूर्व बाद वाले का रेफरेंस होता है। इस प्रकार पास बाय रेफरेंस तंत्र ग्लोबल स्पेस में डेटा को अप्रत्यक्ष रूप से मैनिपुलेट करने में मदद करता है। यह इस तथ्य को दूर करने में भी मदद करता है कि एक फ़ंक्शन केवल एक वेरिएबल लौटा सकता है।
मान द्वारा पासिंग (Pass by Value)
उदाहरण 1: मान द्वारा पासिंग - स्वैप काम नहीं करता
निम्न उदाहरण में, दो वेरिएबल्स को swap() फ़ंक्शन में पास किया जाता है। भले ही स्वैपिंग तंत्र फ़ंक्शन के अंदर होता है, यह पास किए गए वेरिएबल्स के मानों को नहीं बदलता।
<?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
रेफरेंस द्वारा पासिंग (Pass by Reference)
रेफरेंस द्वारा आर्गुमेंट्स प्राप्त करने के लिए, औपचारिक आर्गुमेंट के रूप में उपयोग किए जाने वाले वेरिएबल को & सिंबल से उपसर्गित किया जाना चाहिए। यह कॉल करने के लिए उपयोग किए गए वेरिएबल्स का रेफरेंस बनाता है। इसलिए, फ़ंक्शन के अंदर स्वैपिंग का परिणाम उन मूल वेरिएबल्स में भी प्रतिबिंबित होगा जिन्हें पास किया गया था।
उदाहरण 2: रेफरेंस द्वारा पासिंग - स्वैप काम करता है
<?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
उदाहरण 3: सरणी तत्वों के रूप में रेफरेंस
निम्न उदाहरण में, सरणी तत्व सरणी आरंभीकरण से पहले घोषित व्यक्तिगत वेरिएबल्स के रेफरेंस हैं। यदि तत्व संशोधित होता है, तो वेरिएबल का मान भी बदल जाता है।
<?php
$a = 10;
$b = 20;
$c = 30;
$arr = array(&$a, &$b, &$c);
for ($i = 0; $i < 3; $i++)
$arr[$i]++;
echo "$a $b $c";
?>
आउटपुट
11 21 31
उदाहरण 4: फ़ंक्शन को रेफरेंस द्वारा सरणी पास करना
<?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
उदाहरण 5: ऑब्जेक्ट और रेफरेंस
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