2011-11-15 38 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投入混合可能會使事情變得混亂並且難以閱讀。