2011-11-15 15 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、** and **、** o ** r、** s ** hortest form first。 〜、!、&、|、&&、||、AND、ORを与える –

4

&&は、正しい式の評価によって異なります。||はありません。

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

これは同じになります。

1

括弧がない場合、PHPは各式の左から右への評価を行い、途中でPHPのoperator precedenceを使用します。しかし、論理チェックの場合と同様に、ANDを混ぜて混乱させ、読みにくくすることができます。