我遇到了一个如下所示的代码行:
if ($users == 'all' || $_POST['user'] == 1 && $users == 'admins' || $_POST[ 'user' ] == 0 && $users == 'mods') ...
我不明白所有这些条件是如何满足的,因为它们之间没有括号:(
||
比&&
更重要吗?首先评估哪些部分?
答案 0 :(得分:8)
当然,运算符的顺序也很明确,就像任何体面的编程语言一样。
请参阅this link。
答案 1 :(得分:8)
&&
取决于对正确表达式的评估,||
没有。您可以将其重写为:
if(
$users == 'all' ||
($_POST['user'] == 1 && $users == 'admins') ||
($_POST[ 'user' ] == 0 && $users == 'mods')
)
它会是一样的。
答案 2 :(得分:1)
没有括号,PHP将从左到右评估每个表达式,沿途使用PHP的operator precedence。但是,正如在任何逻辑检查中一样,将AND
投入混合可能会使事情变得混乱并且更难以阅读。
答案 3 :(得分:0)
除非优先级高,否则它从左到右开始。看看这个片段:
var rt = 0;
function rtrue(){
console.log( 'called true', ++rt );
return true;
}
var rf = 0;
function rfalse(){
console.log( 'called false', ++rf );
return false;
}
// all but last get called, eq: false || (true && false) || (false && true)
console.log( '=== result',
rfalse() || rtrue() && rfalse() || rfalse() && rtrue()
);
// second true does not get called, eq: (false && true) || true
console.log( '=== result',
rfalse() && rtrue() || rtrue()
);