加法赋值不会在条件内赋值

Addition assignment won't assign inside conditional

我的(直觉)理解是在 PHP 中对整数类型的变量使用加法赋值运算符 += 会产生加法的结果,同时递增左侧操作数同时被右边操作数的值

这种理解似乎是错误的,因此我的问题。考虑以下代码片段:

$itr = 10;
$incr = 10;

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

为什么输出10而不是20?

使用三元形式也会发生同样的情况:

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 可以解决明显的问题。尽管如此,对原因的正确解释还是很酷的。提前致谢。

Operator precedence:首先计算 > 并导致 false。当转换为整数以添加到您的值时,false 转换为 0.

所以:

$itr += $incr > 10

变为:

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

在 if 语句中,您只是在评估 $itr 被 $incr 递增的可能性,但您并没有有效地指示 PHP 这样做。所以它永远不会存储新值。