加法赋值不会在条件内赋值
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 这样做。所以它永远不会存储新值。
我的(直觉)理解是在 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 这样做。所以它永远不会存储新值。