我遇到了增量運算符的一個奇怪問題。下面的代碼應該輸出什麼?
$j = 0;
for ($i=0; $i<100; $i++)
{
$j = $j++;
}
echo $j;
它回聲0爲什麼不是100?
編輯:當我改變$j = $j++
$j = ++$j
到,它呼應100
我遇到了增量運算符的一個奇怪問題。下面的代碼應該輸出什麼?
$j = 0;
for ($i=0; $i<100; $i++)
{
$j = $j++;
}
echo $j;
它回聲0爲什麼不是100?
編輯:當我改變$j = $j++
$j = ++$j
到,它呼應100
你正在做一個「後增量」,因爲++
出現在它正在修改的變量之後。該代碼,在更短的緊湊的形式寫出來,可以歸結爲:
for ($i = 0; $i < 100; $i++) {
$temp = $j; // store j
$j = $j + 1; // $j++
$j = $temp; // pull original j out of storage
}
如果你有++$j
,則j將首先增加,產生的增加值將被分配回J.然而,這樣的結構使很少有意義。你可以簡單地寫出來
for (...) {
$j++;
}
其歸結爲
for (...) {
$j = $j + 1;
}
感謝Marc B,你解決了我的困惑,$ j ++先存儲了值,所以它變成了0最後。當使用++ $ j時,它首先添加值! – steve 2012-02-18 02:55:28
的問題是與線
$j = $j++;
該命令評估$j
爲0,然後遞增$j
爲1,最後把0賦值回$j
。
可以使用$j = $j + 1;
或者只是$j++;
。
或者只是做$ j = ++ $ j;' – 2012-02-18 02:46:16
@AaronW。這會起作用,但這是多餘的和混亂的。我的團隊永遠不會允許它通過代碼審查。 – 2012-02-18 02:47:40
$j++
是後遞增:表達式的值是$j
,然後$j
遞增。所以你得到j的值,然後遞增j,然後將j設置爲j的原始值。
您正在使用後綴增量,它會在增量前分配變量的值。所以'$ j' = 0每次。 '++ $ j'會在賦值之前進行遞增。當然,你可以完全跳過作業,並自己做'$ j ++'... – Interrobang 2012-02-18 02:46:16
這將是一個很好的面試問題。 – Umbrella 2012-02-18 02:51:30
@傘:這可能是一個很好的電話屏幕問題,以幫助您決定是否值得邀請候選人在現場。 – 2012-02-18 17:43:00