$arr1 = array(1);
arr2 = $arr1;
$arr2[0]++;//$arr1[0]=1,$arr2[0]=2
但下面的代碼 「與」 使用:關於在PHP
$arr1 = array(1);
$a =& $arr1[0];
$arr2 = $arr1;
$arr2[0]++;//$arr1[0]=2,$arr2[0]=2
當我添加$a
,輸出是不同的!爲什麼會發生?
$arr1 = array(1);
arr2 = $arr1;
$arr2[0]++;//$arr1[0]=1,$arr2[0]=2
但下面的代碼 「與」 使用:關於在PHP
$arr1 = array(1);
$a =& $arr1[0];
$arr2 = $arr1;
$arr2[0]++;//$arr1[0]=2,$arr2[0]=2
當我添加$a
,輸出是不同的!爲什麼會發生?
這是參考文獻的工作方式。
仔細看看會發生什麼變化$arr1
之前和分配參考$a
$arr1 = array(1);
var_dump($arr1);
$a =& $arr1[0];
var_dump($arr1);
結果後:
array(1) { [0]=> int(1) }
array(1) { [0]=> &int(1) } //it's a reference now!
正如你看到的,讓$a
的參考之後,還$arr[0]
開始作爲參考。
由於PHP Manual說:
$ a和$ b指向了相同的內容。
而且還有重要的一點:
$ a和$ b在這裏是完全相同。 $ a沒有指向$ b,反之亦然。 $ a和$ b指向相同的地方。
初看起來可能有點困惑,但這是它的工作原理。
代碼的進一步的操作現在應該是明確的:
$arr2 = $arr1;
$arr2[0]++;
你做的$arr1
副本,所以$arr2[0]
也是相同的值的參考就像$a
和$arr1[0]
。然後通過增加$arr2[0]
,你也增加了$a
和$arr
[0]`(或實際增加了這三個引用的目標單個值)。
我會解釋你是在簡單的方法=和&操作
$a = 5;
$b = 10;
$a = $b
echo $a // output is 10
echo $b // output is 10
原因是=是一個賦值操作符,它只是複製的vaiable進出值在其他變量。
$a = 5;
$b = 10;
$a = & $b // here the address of a is assign to variable b.
echo $a // output is 5
echo $b // output is 5
原因是&是引用指針它可以在其它可變挑vaiable進出地址。 當你改變變量的值時,它會改變其他變量的值。
當我執行下面的代碼時,結果與你的不同。結果是'1010'.爲什麼發生? – Frank
你可以查看這個命令的編輯, –
這是參考。 http://php.net/manual/en/language.references.php –
你想從$ a獲得什麼? –
'&'用於調用變量並通過引用傳遞它。所以它使用這個變量的存儲庫存而不是本地變量。 –