2017-02-27 79 views
1

这是我(直觉)的理解,在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固定明显的问题。尽管如此,为什么会非常酷的一个适当的解释。我提前感谢。

+1

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

回答

1

Operator precedence:首先评估>并导致false。当将其转换为一个整数以加上您的值时,false将转换为0

所以:

$itr += $incr > 10 

变为:

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

在if语句,你只评估$ ITR由$增量递增的可能性,但你不能有效地指导了PHP做那。所以它永远不会存储新值。