$var2 = $var1;
$var2 = &$var1;
例子:
$GLOBALS['a']=1;
function test()
{
global $a;
$local=2;
$a=&$local;
}
test();
echo $a;
爲什麼$靜止1?
$var2 = $var1;
$var2 = &$var1;
例子:
$GLOBALS['a']=1;
function test()
{
global $a;
$local=2;
$a=&$local;
}
test();
echo $a;
爲什麼$靜止1?
運算符= &適用於引用而不是值。 $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;
參看文檔。
當您做$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"!
哇,克隆變量。整齊。不知道。 – DMin 2010-08-21 11:04:10
謝謝你,斯蒂芬。 – lovespring 2010-08-21 13:52:43
「PHP使$ var2指向$ var1 - 這意味着你最終會得到兩個指向完全相同的東西的變量。」你自相矛盾;只有第二部分是真實的。 – Artefacto 2010-08-21 17:09:37
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;
謝謝,strager – lovespring 2010-08-21 13:51:47
檢查我的例子,thx。 – lovespring 2010-08-21 12:36:41
「如果您爲函數內部聲明的全局變量分配一個引用,則該引用將僅在函數內部可見,您可以通過使用$ GLOBALS數組來避免這種情況。」檢查我給你的鏈接,有關於全局的整個部分。 – 2010-08-21 12:40:17