## 論理演算子

論理演算子
例 | 名前 | 結果
--- | --- | ---
$a and $b | 論理積 | $a および $b が共に `true` の場合に `true`
$a or $b | 論理和 | $a または $b のどちらかが `true` の場合に `true`
$a xor $b | 排他的論理和 | $a または $b のどちらかが `true` でかつ両方とも `true` でない場合に `true`
! $a | 否定 | $a が `true` でない場合 `true`
$a && $b | 論理積 | $a および $b が共に `true` の場合に `true`
$a || $b | 論理和 | $a または $b のどちらかが `true` の場合に `true`

"and" および "or" 演算子が 2 種類あるのは、演算が行われる際の優先順位が 異なっているためです (演算子の優先順位 を参照ください)。

例1 論理演算子についての説明

    <?php

    // --------------------
    // foo() は決してコールされることはありません。これらの演算子は短絡評価を行うからです。

    $a = (false && foo());
    $b = (true  || foo());
    $c = (false and foo());
    $d = (true  or  foo());

    // --------------------
    // "||" の優先順位は "or" より高くなります

    // $e に代入されるのは、(false || true) の評価結果です
    // これは、次の式と同様です: ($e = (false || true))
    $e = false || true;

    // $f に false を代入してから "or" 演算子を評価します
    // これは、次の式と同様です: (($f = false) or true)
    $f = false or true;

    var_dump($e, $f);

    // --------------------
    // "&&" の優先順位は "and" より高くなります

    // $g に代入されるのは、(true && false) の評価結果です
    // これは、次の式と同様です: ($g = (true && false))
    $g = true && false;

    // $h に true を代入してから "and" 演算子を評価します
    // これは、次の式と同様です: (($h = true) and false)
    $h = true and false;

    var_dump($g, $h);
    ?>

上の例の出力は、 たとえば以下のようになります。

    bool(true)
    bool(false)
    bool(false)
    bool(true)

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open