テクノロジー
2023年2月2日比較演算子と真偽値
- PHPの真偽値のルールが理解できる
- さまざまな比較演算子を使って、数値や文字列の比較評価ができる
PHPの真偽値
何かを評価した時に、結果として true もしくは false が表示されます。
trueもfalseもだだの結果ではなくデータ型に属する値です。
真偽値とはなにかを確認するために、数値や文字列を比較演算子で比較してみましょう。
数値を比較してみよう
比較演算子( ==, ===, <, <=, >, >=, !=, !==, <>, <=> )を使用して数値を比較します。
比較結果をvar_dump関数を使って出力させましょう。
[例]
<?php
var_dump(1 < 5);
var_dump(1 > 5);
[実行結果]
bool(true)
bool(false)
このように、boolean型を示すboolというデータ型とともに true や false が表示されました。
1 < 5 の結果は真なので true、1 > 5 の結果は偽なのでfalse が出力されています
条件式で真偽値を評価してみよう
PHPでは評価の結果が真か偽かで扱われます。
例えば 1 や "A" なども真です。どういうことか、以下の例で確認してみます。
[例]
<?php
if (1) {
echo '真です' . PHP_EOL;
}
[実行結果]
真です
if の後の条件文に 1 が記述されています。”もし1なら”というのは、文章にすると少しおかしさを感じますが、PHPは評価の結果が真か偽かで扱われます。そのため、1 は真と評価されて echo '真です' . PHP_EOL; が実行されたのです。
もちろん true は真、false は偽です。
[例]
<?php
if (true) {
echo '真です' . PHP_EOL;
}
[実行結果]
真です
PHPの真偽値のルール
では、どのような値や評価結果が真なのでしょうか。PHPは真偽値について以下のようなルールがあります。
false, 0, -0, 0.0, -0.0, '', null, []が偽
それ以外はすべて真
※ null は次回のテキストで学習しますが、何も存在しないことを表す型です。
つまり、以下のような条件式では、echo '偽です' . PHP_EOL; が実行されるということです。
[例]
<?php
$val = null;
if ($val) {
echo '真です' . PHP_EOL;
} else {
echo '偽です' . PHP_EOL;
}
[実行結果]
偽です
厳密な比較
同じ型かつ同じ値かどうか比較するときは、演算子 ===, !== を使います。
同じ型かつ同じ値の場合にtrueを返す
=== は同じ型かつ同じ値のときは true を返し、そうでないときは false を返します。
[例]
<?php
var_dump(10 === 10);
var_dump(10 === 11);
var_dump('php' === 'php');
[実行結果]
bool(true)
bool(false)
bool(true)
型が異なると false となります。
[例]
<?php
var_dump(10 === '10'); // integer と string の比較
[実行結果]
bool(false)
同じ型かつ同じ値の場合に false を返す
!==は同じ型かつ同じ値のとき false を返し、そうでないときは true を返します。
[例]
<?php
var_dump(10 !== 10);
var_dump(10 !== 11);
[実行結果]
bool(false)
bool(true)
緩やかな比較
同じ値かどうか比較するときは、演算子 ==, != を使います。
型の相互変換をした後で、真偽値の評価を行う
== と != は自動で型の相互変換が行われます。同じ値のときは true を返し、そうでないときは false を返します。
[例]
<?php
var_dump(10 == 10); // integer 同士の比較
var_dump(10 == '10'); // integer と string の比較
[実行結果]
bool(true)
bool(true)
上記の例ではstring型の'10'が、integer型の10に変換されてから比較されるので、両方とも true となります。
緩やかな比較は、PHPのバージョンによって挙動が異なったり、エンジニアが意図しない挙動となる可能性があります。
そのため、基本的には緩やかな比較は使用せず、厳密な比較を使うようにしましょう。
まとめ
- 2つの値を比較するには比較演算子を使う
- 値や評価の結果が真偽値であり、 true と false がある