Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 添加任务赢得';t在条件内分配_Php_Operators_Variable Assignment_Addition - Fatal编程技术网

Php 添加任务赢得';t在条件内分配

Php 添加任务赢得';t在条件内分配,php,operators,variable-assignment,addition,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 使用三元形式也会发生同

我(直观)的理解是,在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.
发生了什么事


Edit:嗯,我发现用括号括住表达式
$itr+=$incr
可以解决明显的问题。不过,一个恰当的解释为什么会很酷。提前感谢。

:首先评估
,并导致
错误。当强制转换为整数以添加到值时,
false
被强制转换为
0

因此:

变成:

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

在if语句中,您只是评估$itr增加$incr的可能性,但并没有有效地指示PHP这样做。因此,它从不存储新值

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