2010-08-21 7 views

उत्तर

13

ऑपरेटर = & संदर्भों के साथ काम करता है और मूल्य नहीं। $var2=$var1 और $var2=&$var1 के बीच का अंतर इस मामले में दिखाई दे रहा है:

$var1 = 1; 
$var2 = $var1; 
$var1 = 2; 
echo $var1 . " " . $var2; // Prints '2 1' 

$var1 = 1; 
$var2 =& $var1; 
$var1 = 2; 
echo $var1 . " " . $var2; // Prints '2 2' 

आप = का उपयोग करते हैं & ऑपरेटर आप $ var2 को नहीं कहता "$ var1 का मान ले अब" के बजाय आप की तरह कुछ कहते हैं कि " आपका मान उसी स्थान पर संग्रहीत किया जाएगा जो $ var1 का मान "। तो जब भी आप $ var1 या $ var2 की सामग्री बदलते हैं, तो आप दो चरों में संशोधन देखेंगे।

अधिक जानकारियां लिए पर PHP.net

संपादित देखो: वैश्विक भाग के लिए , आप $GLOBALS["a"] =& $local; सी एफ का उपयोग करना होगा प्रलेखन।

+0

मेरा उदाहरण, thx जांचें। – lovespring

+0

"यदि आप किसी फ़ंक्शन के अंदर वैश्विक रूप से घोषित वैरिएबल का संदर्भ निर्दिष्ट करते हैं, तो संदर्भ केवल फ़ंक्शन के अंदर दिखाई देगा। आप $ GLOBALS सरणी का उपयोग कर इससे बच सकते हैं।" मैंने जो लिंक दिया है उसे जांचें, ग्लोबल्स के बारे में एक संपूर्ण खंड है। –

5

जब आप $var2 = $var1 करते हैं, तो PHP $var1 की एक प्रति बनाता है, और इसे $var2 में रखता है। हालांकि, अगर आप $var2 = &$var1 करते हैं, तो कोई प्रतिलिपि नहीं बनाई जाती है। इसके बजाय, PHP $var2$var1 पर इंगित करता है - इसका अर्थ यह है कि आप सटीक पर एक ही चीज़ के साथ समाप्त होते हैं।

एक उदाहरण:

$var1 = "Foo"; 
$var2 = $var1; // NORMAL assignment - $var1's value is copied into $var2 
$var3 = &$var1; // NOT normal copy! 

echo $var2; // Prints "Foo". 
echo $var3; // Also prints "Foo". 

$var1 = "Bar"; // Change $var1. 

echo $var2; // Prints "Foo" as before. 
echo $var3; // Now prints "Bar"! 
+0

वाह, चर क्लोनिंग। साफ। उसे नहीं पता था। – DMin

+0

धन्यवाद, स्टीफन। – lovespring

+0

"PHP $ var1 बिंदु $ var1 पर बनाता है - इसका क्या अर्थ है कि आप दो चर के साथ समाप्त होते हैं जो सटीक चीज़ पर इंगित करते हैं।" आप खुद के विरोधाभास कर रहे हैं; और केवल दूसरा भाग सच है। – Artefacto

1
global $a; 

इस के बराबर है: जब आप $a एक नया संदर्भ आवंटित

$a = &$GLOBALS['a']; 

, आप $a और नहीं $GLOBALS['a'] बदल रहे हैं।

आप नीचे आउटपुट होने की क्या अपेक्षा करते हैं?

$GLOBALS['a']=1; 

function test() 
{ 
    $a='foobar';   // $a is a normal variable 
    $a=&$GLOBALS['a']; // same as: global $a; 
    $local=2; 
    $a=&$local; 
} 

test(); 

echo $a; 
+0

धन्यवाद, धन्यवाद – lovespring

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