2011-11-15 34 views
3

我遇到了一个代码行,看起来像这样:多个布尔条件 - 运算符优先级

if ($users == 'all' || $_POST['user'] == 1 && $users == 'admins' || $_POST[ 'user' ] == 0 && $users == 'mods') ... 

我不明白怎么都是这些条件满足,因为没有它们之间的括号:(

||&&更重要的?哪些部分会首先评估?

+3

http://php.net/manual/en/language.operators.precedence.php – matino

回答

7

当然运营商的顺序是明确的,在任何像样的编程语言。

请参阅this link

+1

我使用** Nandos **作为助记符:** N ** ot,**和**,** o ** r,** s **首先形式。给〜,!,&,|,&&,||,AND,OR –

4

&&取决于对正确表达的评估,||没有。您可以将其改写为:

if(
    $users == 'all' || 
    ($_POST['user'] == 1 && $users == 'admins') || 
    ($_POST[ 'user' ] == 0 && $users == 'mods') 
) 

而且它也是一样的。

1

在没有括号的情况下,PHP会从一开始就使用PHP的operator precedence从左到右评估每个表达式。然而,正如在任何逻辑检查中一样,将AND投入混合可能会使事情变得混乱并且难以阅读。