在做$x++
時,您正在後遞增...這意味着增量只會發生在語句被評估之後。
因此,考慮下面的代碼:
$x = 10; $y = 0; $z = 5;
$y = $z * $x++;
PHP做到這一點:
$x = 10; $y = 0; $z = 5;
$y = $z * $x++;
// Ignore Post-Increment, Evalutate
$y = $z * $x;
$y = 5 * 10;
// Now Increment x - POST-INCREMENT
$x = $x + 1;
$x = 10 + 1;
$x = 11;
// Continue evaluating statement
$y = 5 * 10;
$y = 50;
在做++$x
,你是預遞增......這意味着增量將之前發生聲明評估:
$x = 10; $y = 0; $z = 5;
$y = $z * ++$x;
// Do Pre-Increment
$x = $x + 1;
$x = 10 + 1;
$x = 11;
// Evaluate
$y = $z * $x;
$y = 5 * 11;
$y = 55;
在for
的情況下循環在PHP,PHP計算一個for循環如下:
for($i = 0; $i < 30; $i++) {
doSomething();
}
// Is evaluated EXACTLY as such by PHP
$i = 0;
while($i < 30) {
doSomething();
$i++;
}
第一個表達式($i = 0
)進行評估(執行)一次無條件在循環的開始。
在每次迭代開始時,對$i < 30
進行評估。如果它的計算結果爲TRUE,則循環繼續,並執行嵌套語句。如果它評估爲FALSE,則循環的執行結束。
在每次迭代結束時,$i++
被評估(執行)爲獨立表達式。
因此,作爲循環中的第三個表達式進行遞增或預增量變量不會影響其行爲。在這種簡單情況下,兩個表達式的行爲將完全相同。
然而,在複雜的循環如下列:
for($i = $j = 0; $i < 30; $i += ++$j) {
$j = getResult($j);
}
後遞增或預遞增$j
直接影響根據上述實施例的的$i
值。在這種情況下,您需要準確選擇您想要做的事情。
這種行爲是語言不可知的(或至少,不是特定於PHP),所以這實際上是一個重複的[爲什麼不改變前增量後迭代部分for循環有所作爲?](http://stackoverflow.com/questions/1918196/why-doesnt-changing-the-pre-to-the-post-increment-at-the-iteration-part-of-a -for) –
除了標記說什麼以外,這個問題表明你對for循環實際上有一個相當基本的誤解......沒有任何複製 - for循環的第3個子句在最後執行的循環體。你可以把任何你喜歡的statmenet放在裏面,不會發生任何特殊的複製 – tobyodavies
而沒有引用不會作爲指針。 – netcoder