2017-02-27 16 views
1

整数代入の変数に対して加算代入演算子+=を使用すると、加算結果が得られますが、左側のオペランドを同時に、右側のオペランドの値。加算代入は条件付きの内部に代入されません

この理解は間違っているように見えますが、私の質問です。

$itr = 10; 
$incr = 10; 

if ($itr += $incr > 10) { // evaluates as true... 
    echo $itr; // but value of $itr remains unchanged 
} 

なぜ20の代わりに10を出力するのですか?

同じことが三部形式を使用して行われます

echo ($itr += $incr > 10) ? $itr : 'neverhere'; // prints 10 
// Note: I know that parentheses aren't really necessary here, it's just a personal practice. 

何が起こっていますか?


編集:まあ、私は括弧で表現$itr += $incrを周囲の見かけ上の問題が修正されていることが分かりました。それでも、なぜ非常に涼しいの適切な説明。事前に感謝します。

+1

http://php.net/manual/en/language.operators.precedence.php –

答えて

1

Operator precedence>が最初に評価され、falseになります。値に加算する整数にキャストすると、は0にキャストされます。だから、

$itr += $incr > 10 

になる:if文で

$itr += ($incr > 10) 
$itr += (false) 
$itr += 0 
0

あなただけ$ INCRずつ増加しているITR $の可能性を評価しているが、あなたは効果的に行うためのPHPに指示されていませんそれ。したがって、新しい値は保存されません。

関連する問題