我遇到了一個代碼行,看起來像這樣:多個布爾條件 - 運算符優先級
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