0

重複
の可能性: 論理演算子 || またはまたは?

OR は || の別の書き方だといつも思っていました。PHP の演算子。|| よりも OR を使用することを好む唯一の方法 || 以来、コードが読みやすくなります。IIや11などと混同される可能性があります...

ある日、私はこのことに出くわしました:

<?php 
      $a = 'string_b';
      $active = ($a == 'string_a') OR
                ($a == 'string_b') OR
                ($a == 'string_c');  
   var_dump($active); // Prints FALSE;
?>

なぜこうなった?

4

3 に答える 3

4

唯一の違いは演算子の優先順位です。演算子の優先順位を参照してください||より優先度が高いOR

ちなみに、は正しいものをvar_dump($a) 返します nullが、出力string_bします。しかし、var_dump($active)実際には予期しない結果が生じfalseます。実際、=は よりも優先度が高いorため、コードは次と同等です。

($active = ($a == 'string_a')) OR ($a == 'string_b') OR ($a == 'string_c');

false最初にアクティブに割り当て、次に最初の の右側の部分を実行しORます。

于 2012-09-17T08:42:08.470 に答える
2

それは同じだ。ただし、 http://php.net/manual/en/language.operators.precedence.php||より優先度が高いOR

于 2012-09-17T08:40:32.027 に答える
1

= は OR よりも優先されます。したがって、$active = ($a == 'string_a') が最初に評価されますが、これは false です。右側全体を独自の括弧セットで囲むと、期待した結果が得られます。

<?php 
      $a = 'string_b';
      $active = (
                 ($a == 'string_a') OR
                 ($a == 'string_b') OR
                 ($a == 'string_c')
                );
   var_dump($active); // Prints TRUE;
?>
于 2012-09-17T08:49:03.267 に答える