我遇到了一个代码行,看起来像这样:多个布尔条件 - 运算符优先级
if ($users == 'all' || $_POST['user'] == 1 && $users == 'admins' || $_POST[ 'user' ] == 0 && $users == 'mods') ...
我不明白怎么都是这些条件满足,因为没有它们之间的括号:(
是||
比&&
更重要的?哪些部分会首先评估?
我遇到了一个代码行,看起来像这样:多个布尔条件 - 运算符优先级
if ($users == 'all' || $_POST['user'] == 1 && $users == 'admins' || $_POST[ 'user' ] == 0 && $users == 'mods') ...
我不明白怎么都是这些条件满足,因为没有它们之间的括号:(
是||
比&&
更重要的?哪些部分会首先评估?
当然运营商的顺序是明确的,在任何像样的编程语言。
请参阅this link。
我使用** Nandos **作为助记符:** N ** ot,**和**,** o ** r,** s **首先形式。给〜,!,&,|,&&,||,AND,OR –
&&
取决于对正确表达的评估,||
没有。您可以将其改写为:
if(
$users == 'all' ||
($_POST['user'] == 1 && $users == 'admins') ||
($_POST[ 'user' ] == 0 && $users == 'mods')
)
而且它也是一样的。
在没有括号的情况下,PHP会从一开始就使用PHP的operator precedence从左到右评估每个表达式。然而,正如在任何逻辑检查中一样,将AND
投入混合可能会使事情变得混乱并且难以阅读。
http://php.net/manual/en/language.operators.precedence.php – matino