其实,多加几个括号你就明白了,因为 && 的执行大于 赋值 ,实际上执行的顺序是:
$a = 0;$b = 0;if ($a = ( 3 && ($b = 3))) { var_dump($a, $b); $a++; var_dump($a, $b); $b++;}echo $a . "," . $b;
if的条件表达式计算时,会发生类型转换,但是只有计算结果才是bool,表达式的参与变量所属类型并不受影响。