我写了一些代码,发现它没有像我预期的那样工作.
例如,以下内容将返回false或抛出异常Undefined variable: a:
if ($a = 12 && $a == 12) {
return true;
} else {
return false;
}
Run Code Online (Sandbox Code Playgroud)
我通过将赋值包装在括号中来修复它:
if (($a = 12) && $a == 12) {
return true;
} else {
return false;
}
Run Code Online (Sandbox Code Playgroud)
这只是一个幸运的猜测.我想知道为什么需要括号,我没有找到解释原因的东西.
那是因为运营商的优先权.赋值运算符=的优先级低于&&,因此如果没有括号,则实际执行以下操作.
if ($a = (12 && $a == 12))
Run Code Online (Sandbox Code Playgroud)
观察$a在赋值发生之前尚未定义第二个,因为必须在赋值发生之前对其进行求值.