テクノロジー
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
がある