phpを勉強していて「比較演算子」の項目に入ったのですが、覚える演算子が多いので忘れない様にここにまとめておこうと思います。
##比較演算子とは
比較演算子とは「大小」を比べるときに使う演算子です。この演算子を使った結果はtrue
、false
という理論値で結果が返ってきます。true/false
は真/偽
という意味を示しています。つまり比較演算子の結果は必ずtrue
orfalse
のどちらかの値になるということです。
##比較演算子の一覧
演算子 | 演算式 | 説明 |
---|---|---|
> | a > b | aがbより大きい値の時true |
< | a < b | aがbより小さい値の時true |
>= | a >= b | aがb以上の値の時true |
<= | a <= b | aがb以下の値の時true |
== | a == b | aとbの値が等しいときtrue |
!= | a != b | aとbの値が等しくないときtrue |
=== | a === b | aとbの値も型も等しいときtrue |
!== | a !== b | aとbの値も型も等しくないときtrue |
##「>=」を使って構文を試しに書いてみる。
試しに、以下の様な構文を書いてみました。
<?php
$point = 11.6;
if ($point >= 10) {
echo "合格";
} else {
echo "失格";
}
?>
合格
point
という変数が10以上なら合格、で10以下なら失格がecho
によって出力される意味です。
実際$point
という変数には11.6
を代入してますので、この場合10以上ということで「合格」が出力されています。
##「==」と「===」の違いって?
下の 構文を見てください↓
<?php
$hantei1 = (99 == 99);
$hantei2 = ("99" == 99);
var_dump($hantei1);
var_dump($hantei2);
?>
bool(true)
bool(true)
出力結果に出てくる
bool(true)
のbool
は「boolean(論理型)」の略のことで「型」とは扱う値の形式(性質)を表す概念です。
bool
は真偽の値を表す型です。この型の値はtrueまたはfalseのいずれかになります。trueが「真」、falseが「偽」という意味になります。
###「"99" == 99」
が「true」になってしまう!
上記の表によると「==」は「aとbの値が等しいときtrue」となっている。しかし"99"
は「99」という文字(文字列)であり、一方99
は純粋な「99」という数値である。両者正確には一致していない。なぜだろう?
###「"99" == 99」
が「true」になってしまう理由。
"99"
が「文字列型」、で99
が「整数型」になります。
両者「型」が違っているわけで本来なら別物と判断されるべきなのですが、PHPは特に型の扱いが曖昧な一面を持っています。そのため「直感と違う振る舞いをすること」が時々見られます。
今回の場合、"型"
は文字列
でも数字しか含まれてないんだから、ほんとは数値として等しいかと聞いてるんだろう
と、親切心で解釈しちゃったんですね。
この現象を 型変換(キャスト) といいます。
##厳密に比べる時は===
を使う
そこで「値だけでなく型も厳密に比較する」比較演算子として===
や!==
があります。
これを使うと型まで比較の対象になるので以下の様な結果になります。
<?php
$hantei3 = (99 === 99);
$hantei4 = ("99" === 99);
var_dump($hantei3);
var_dump($hantei4);
?>
bool(true)
bool(false)
出力を見ると$hantei4 = ("99" === 99);
の比較に対してvar_dump($hantei4);
(真偽の結果)は「false(偽)」と出ています。
つまり===
を使って比較した場合、「値だけでなく、型も同じかどうかも含めて比較してる」事になります。
##まとめ
今回は「比較演算子」について、「型」という概念にも少し触れながらまとめてみました。
ちなみに、私自身、PHPの勉強中なので今回の文章の内容で間違った部分等ありましたらご指摘いただけると幸いです。
以上になります。