2014-07-23 40 views
1

請諒解遲到的標題。我的號碼不夠好嗎?

這個問題與variable by reference有關。


假設我們有一點點for循環是這樣的:

for($i = 0; $i < 5; $i++) { 
    $r = 15; 
    $t = &$i + $r; 
    array_push($a, $t); 
} 

預期輸出:

Array 
(
    [0] => 15 
    [1] => 16 
    [2] => 17 
    [3] => 18 
    [4] => 19 
) 

返回的輸出:

Array 
(
    [0] => 0 
    [1] => 1 
    [2] => 2 
    [3] => 3 
    [4] => 4 
) 

然而,如果我有什麼像這樣:

for($i = 0; $i < 5; $i++) { 

    $r = 15; 
    $num = &$i; 
    $t = $num + $r; 

    array_push($a, $t); 
} 

它返回上述確切的預期結果。

請問有人可以提供一些解釋。

+3

'$ t =&$ i + $ r'是什麼意思?'應該這樣做?!答案是*某事引用了某事物*,任何人都可以詳細瞭解它們是否傾向於有足夠的時間。 *真實的*答案是*爲什麼你這樣做的第一位?!* – deceze

+0

@deceze它看起來很愚蠢是的,我試圖找出爲什麼第一個例子不會工作,而第二個。這不是用於生產或任何事情,它在這裏是爲了通過參考更好地理解變量。 – Darren

+0

FWIW我會說未定義的行爲導致未定義的結果。我甚至無法解釋這條線是應該做什麼的,所以我不擔心它不這麼做...... P – deceze

回答

3

我將有一個去...

在第二個例子:

for($i = 0; $i < 5; $i++) {  
    $r = 15; 
    $num = &$i;  // now $num and $i are the same thing - perfectly legitimate 
    $t = $num + $r; // equivalent to $t = $i + $r  
    array_push($a, $t); 
} 

而在第一個例子:

for($i = 0; $i < 5; $i++) { 
    $r = 15; 
    $t = &$i + $r; // $t and $i are the same thing. $r is not involved 
    $t = &$i * "anything you want"; // this does exactly the same thing   
    array_push($a, $t); 
} 

注意in the documentation,這些類型的作業的寫爲像$t =& $i,我認爲這是一個有用的提醒,你只是在兩個之間創建一個別名在同一個陳述中,ngs和其他任何東西都是不相關的。

+0

我會接受的!你已經完全解釋了,謝謝! – Darren

+0

@Darren沒問題,謝謝你接受我的回答。我刪除了關於使用括號將語句分組的部分,因爲我不認爲它添加了任何內容。如果你不同意,請告訴我。 –

+0

絕對沒有錯!再次歡呼。 – Darren