PHP入門 ≫ LESSON7 比較演算子
判定とは?
数値や文字列は比較することができます。
二つの関係を比較するのに演算子を使います。
関係演算子
数値や文字列の関係は、真(true)または偽(false)として判定されます。
真の場合は1を返し、偽の場合は何も返しません。
比較演算子
数値や文字列を比較した結果は、大きい(1)・等しい(0)・小さい(-1)として判定されます。
数値
数値を比較する演算子には次のようなものがあります
a < b | a < bなら真・それ以外は偽 (aはbよりも小さい) |
---|---|
a > b | a > bなら真・それ以外は偽 (aはbよりも大きい) |
a <= b | a <= bなら真・それ以外は偽 (aはb以下) |
a >= b | a >= bなら真・それ以外は偽 (aはb以上) |
a == b | a == bなら真・それ以外は偽 (aとbは等しい) |
a === b | aとb同じ型で、a == bなら真・それ以外は偽 (aとbは等しい) |
a != b | a != bなら真・それ以外は偽 (aとbは等しくない) |
a >< b | a != bなら真・それ以外は偽 (aとbは等しくない) |
a !== b | a != bかaとbが同じ型でないなら真・それ以外は偽 (aとbは等しくない) |
a <=> b | a > bなら1,a == bなら0,a < bなら-1(PHP7以降) |
最後の一つが比較演算子、あとは関係演算子です。
$kekka = 6 < 12;
echo "6 < 12 : $kekka\n";
$kekka = 6 > 12;
echo "6 > 12 : $kekka\n";
$kekka = 10 <= 9;
echo "10 <= 9 : $kekka\n";
$kekka = 10 >= 10;
echo "10 >= 10 : $kekka\n";
$kekka = 6 == 6;
echo "6 == 6 : $kekka\n";
$kekka = 6 != 7;
echo "6 != 7 : $kekka\n";
$kekka = 6 <=> 12;
echo "6 <=> 12 : $kekka\n";
結果は以下。
6 < 12 : 1
6 > 12 :
10 <= 9 :
10 >= 10 : 1
6 == 6 : 1
6 != 7 : 1
6 <=> 12 : -1
数値を変えて色々試してみて下さい。
「===」や「!==」のように、型が一致する、しないとはどういう意味でしょうか?
やってみましょう。
$kekka = 6 == '6';
echo "6 == '6' : $kekka\n";
$kekka = 6 === '6';
echo "6 === '6' : $kekka\n";
結果は以下。
6 == '6' : 1
6 === '6' :
数値6と文字'6'は「==」だと同じと判断されるが、「===」だと型が違うので偽ということになります。
「!==」は、「===」の否定形です。型と値が一致した場合のみ偽となります。
文字列
文字列の比較も、基本的に数値の演算子と同じです。
一致するしないは、「==」や「!=」、「===」を使います。
大きい、小さいの比較は演算子ではなくstrcmp関数を使います。(後に説明)
ちなみに文字列の大きい・小さいは、辞書順に並べた時に先に来る方が小さいと考えます。
$kekka = abc" == "abc";
echo '"abc" == "abc" : ' . $kekka . "\n";
$kekka = "1abc" == 1;
echo '"1abc" == 1; : ' . $kekka . "\n";
$kekka = "1abc" === 1;
echo '"1abc" === 1; : ' . $kekka . "\n";
結果は以下。
"abc" == "abc" : 1
"1abc" == 1; : 1
"1abc" === 1; :
「==」は勝手に型変換を行ってしまうので、"1abc"は勝手に1とされてしまうので、結果は真になります。
正確に行うには「===」を使うか、strcmp関数を使いましょう。
否定
判定結果を反転させることができます。!を前に付けると「~ではない」という否定の意味になります。 よって、
$kekka = 1 < 2;
echo "1 < 2 : $kekka\n";
$kekka = !(1 < 2);
echo "!(1 < 2) : $kekka\n";
結果は以下。
1 < 2 : 1
!(1 < 2) :
結果が真の場合は偽に、偽の場合は真に。
1の場合は偽に、0または-1の場合は真になります。
論理型
PHPのデータ型に、論理型というものがあります。
これは、TRUEかFALSE、どちらかの値が入る特殊な型です。
他の型から論理型にデータを変換するときは、基本的に1など何か値のあるものはTRUE、0やNULL(値がセットされていない変数中身)はFALSEとされます。
$kekka = TRUE;
echo "$kekka\n";
var_dump($kekka);
$kekka = FALSE;
echo "$kekka\n";
var_dump($kekka);
結果は以下。
1
bool(true)
bool(false)
値は、var_dumpを使うと型と値がはっきりと出力されます。
boolは論理型を指します。ちなみに、true、falseと小文字でもかまいません。