我写了一些代码,发现它没有像我预期的那样工作。
例如,以下内容将返回false
或抛出异常Undefined variable: a
:
if ($a = 12 && $a == 12) {
return true;
} else {
return false;
}
我通过将作业包装在括号中来修复它:
if (($a = 12) && $a == 12) {
return true;
} else {
return false;
}
这只是一个幸运的猜测。我想知道为什么需要括号,而我却找不到任何解释原因的方法。
答案 0 :(得分:7)
那是因为operator precedence。赋值运算符=
的优先级低于&&
,因此如果没有括号,您实际上是在执行以下操作。
if ($a = (12 && $a == 12))
观察到在赋值发生之前尚未定义第二个$a
,因为必须在赋值发生之前对其进行评估。