PHP变量赋值需要括号

jar*_*ack 1 php

我写了一些代码,发现它没有像我预期的那样工作.

例如,以下内容将返回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)

这只是一个幸运的猜测.我想知道为什么需要括号,我没有找到解释原因的东西.

mer*_*011 7

那是因为运营商的优先权.赋值运算符=的优先级低于&&,因此如果没有括号,则实际执行以下操作.

if ($a = (12 && $a == 12))
Run Code Online (Sandbox Code Playgroud)

观察$a在赋值发生之前尚未定义第二个,因为必须在赋值发生之前对其进行求值.