[PHP] 2種類の論理演算子 ─ && と and ─
意外と知られていないのだけど、PHP の論理演算子には &&
と ||
、and
と or
の 2 種類がある。
何が違うの?
マニュアルによれば、両者の違いは「優先順位」だそう。
and
と or
よりも &&
と ||
のほうが演算子としての優先順位が高い。
どちらも挙動は同じなので、好きなほうを使っていいのだけど、and
と or
を使うときは注意すべきことがある。
それは、and
と or
の優先順位が代入演算子 (=
, +=
, *=
など) よりも低いこと。
以下のコードを見ると違いがわかりやすい。
echo $a = true && false;
echo var_dump($a);
#==> bool(false)
echo $a = true and false;
echo var_dump($a);
#==> bool(true)
&&
は =
よりも優先順位が高いので、$a = (true && false)
となり、$a
には false
が入る。
しかし、and
は =
よりも優先順位が低いので、($a = true) && false
となり、$a
には true
が入る。
どっちを使うべき?
PSR にはどちらを使えという指定はない。
ただ、Laravel では &&
と ||
が使われているので、&&
と ||
を使うのが一般的と考えて良さそう。
and
と or
の使いどころを考えている人がいた1が、効果的な使い分けはない様子。
Python は and
と or
だし、どちらを使うのかは可読性や仕様を鑑みて、プロジェクトメンバーと話し合ってみるといいかもしれない。
少なくとも、プロジェクト内で統一する必要はある。
個人的には、$a = true && false
は $a = (true && false)
であってほしいので、&&
と ||
を使うことにする。