2010-08-21 60 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 2010-08-21 12:36:41

+0

「如果您爲函數內部聲明的全局變量分配一個引用,則該引用將僅在函數內部可見,您可以通過使用$ GLOBALS數組來避免這種情況。」檢查我給你的鏈接,有關於全局的整個部分。 – 2010-08-21 12:40:17

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 2010-08-21 11:04:10

+0

謝謝你,斯蒂芬。 – lovespring 2010-08-21 13:52:43

+0

「PHP使$ var2指向$ var1 - 這意味着你最終會得到兩個指向完全相同的東西的變量。」你自相矛盾;只有第二部分是真實的。 – Artefacto 2010-08-21 17:09:37

1
global $a; 

這相當於:

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

當分配$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

謝謝,strager – lovespring 2010-08-21 13:51:47

相關問題