添加分配不会在有条件的内部分配

时间:2017-02-27 09:31:38

标签: php operators variable-assignment addition

我的(直观)理解是在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表达式修复了明显的问题。不过,正确解释为什么会非常酷。我提前感谢。

2 个答案:

答案 0 :(得分:1)

Operator precedence:首先评估>并导致false。当投放到一个整数以添加到您的值时,false会投放到0

所以:

$itr += $incr > 10

变为:

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

答案 1 :(得分:0)

在if语句中,你只是在评估$ itr增加$ incr的可能性,但你并没有有效地指导PHP来做这件事。因此它永远不会存储新值。