PHP References
Introduction to PHP References
PHP में references का अहम role होता है। References को अलग अलग purposes के लिए program में यूज़ कर सकते है। ये pointers की तरह नहीं होते है। उदाहरण के लिए निचे दिए हुए program को देखिये।
<?php
$a =& $b;
$a = "Indian";
echo $a; //It will print Indian
echo $b; //It will also print Indian
?>
ऊपर दिए हुए program में जब दोनों variables की value print की जाती है तो दोनों same value print करते है क्योंकि दोनों एक ही value को refer कर रहे है।
यदि आप किसी ऐसे variable को assign, pass और return करने की कोशिश करते है जो क्रिएट नहीं किया गया है तो वह variable automatically create हो जाता है। उदाहरण के लिए निचे दिए हुए program को देखिये।
<?php
function myFunction(&$a)
{
$a = 2;
echo $a;
}
myFunction($a);
?>
ऊपर दिए गए उदाहरण में myFunction()को call करते समय एक ऐसा variable pass किया जा रहा है जिसको क्रिएट ही नहीं किया गया है। लेकिन क्योंकि function में इस variable का reference पास किया जा रहा है इसलिए PHP इस variable को automatically क्रिएट कर देती है।
यदि आप for each लूप में भी referenced variables यूज़ करते है तो दोनों variables की value update होती है। उदाहरण के लिए निचे दिया हुआ program देखिये।
<?php
$arr = array(1,2,3,4,5);
$number =& $value;
foreach($arr as $value);
{
echo $value;
}
echo $number;
echo $value;
?>
ऊपर दिए उदाहरण में foreach लूप में $value variable को यूज़ किया गया है लेकिन इसके साथ साथ $number variable में भी array की value update होती है। और जब दोनों variables को प्रिंट किया जाता है तो दोनों ही iteration की last value 5 print करते है।
Assigning by Reference
एक variable को दूसरे variable की value assign करना बिलकुल simple है। इसके लिए आप ampersand(&) operator यूज़ करते है। आप इस प्रकार reference के द्वारा assign कर सकते है।
Ex.
$a =& $b
जैसा की मैने आपको पहले बताया की PHP में reference का मतलब होता है की दोनों variables same value को point करते है। References को यूज़ करते समय आपको ये बात हमेशा याद रखनी चाहिए। अब जब आप इन दोनों में से किसी भी variable को value assign करेंगे तो दोनों उस एक ही value को point करेंगे।
Passing by Reference
आप references के द्वारा कोई variable ना पास करके उसका reference भी पास कर सकते है। ऐसा आप function के parameters को ampersand (&) के साथ declare करके कर सकते है। जब आप ऐसा करेंगे तो आप उस parameter को ही function में यूज़ कर सकते है और सभी tasks perform कर सकते है। ऐसा करने से parameter में change आने पर आपका argument भी update हो जाता है। उदाहरण के लिए निचे दिया हुआ program देखिये।
<?php
function myFunction(&$num)
{
$num = $num * 2;
}
$a = 5;
myFunction($a);
echo $a;
?>
ऊपर दिए हुए उदाहरण में $a का reference पास किया जा रहा है और function में $num को यूज़ किया जा रहा है। जब $num की value change होती है तो $a की value भी change होती है और 10 हो जाती है।
Returning Reference
किसी भी function से reference return करने के लिए आपको function के नाम से पहले ampersand (&) operator यूज़ करना होगा।
<?php
class myClass
{
public $name = "jai";
public function &myFunction()
{
return $this->name; //returns reference of $name
}
}
$obj = new myClass();
$myName = &$obj->myFunction(); //assigning by reference to $myName
echo "<h2>$myName"</h2>; //prints jai
$obj -> name ="jai ho";
echo "<h2>$myName</h2>"; //prints jai ho
?>
ऊपर दिए गए उदाहरण में आप देख सकते है की function एक reference return करता है। जिसे दूसरे variable को assign किया गया है। यह उदाहरण निचे दिया गया output generate करता है।