2017-04-18 51 views
2
$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,輸出是不同的!爲什麼會發生?

+3

這是參考。 http://php.net/manual/en/language.references.php –

+0

你想從$ a獲得什麼? –

+0

'&'用於調用變量並通過引用傳遞它。所以它使用這個變量的存儲庫存而不是本地變量。 –

回答

4

這是參考文獻的工作方式。

仔細看看會發生什麼變化$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]`(或實際增加了這三個引用的目標單個值)。

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進出地址。 當你改變變量的值時,它會改變其他變量的值。

+0

當我執行下面的代碼時,結果與你的不同。結果是'1010'.爲什麼發生? – Frank

+0

你可以查看這個命令的編輯, –

0

@JakubMatczak 感謝您的專業回覆。但我仍然有一些問題。

$arr1 = array(1, 2); 
$a =& $arr1; 
$arr2 = $arr1; 
$arr2[0]++; 
$arr2[1]++; 

爲什麼的$arr1結果array(1, 2)array(2, 2)

+0

因爲'$ arr2'是'$ arr1'的副本嗎? – zerkms

+0

@zerkms謝謝,您可以查看上面的原始問題。當$ a =&$ arr1 [0]''$ arr1'的結果是'array(2,2)'時。 – Frank