テクノロジー

2023年2月2日

比較演算子と真偽値

  • PHPの真偽値のルールが理解できる
  • さまざまな比較演算子を使って、数値や文字列の比較評価ができる

PHPの真偽値

何かを評価した時に、結果として true もしくは false が表示されます。
truefalseもだだの結果ではなくデータ型に属する値です。
真偽値とはなにかを確認するために、数値や文字列を比較演算子で比較してみましょう。

数値を比較してみよう

比較演算子( ==, ===, <, <=, >, >=, !=, !==, <>, <=> )を使用して数値を比較します。
比較結果をvar_dump関数を使って出力させましょう。

[例]

<?php
 
var_dump(1 < 5);
var_dump(1 > 5);

[実行結果]

bool(true)
bool(false)

このように、boolean型を示すboolというデータ型とともに truefalse が表示されました。
1 < 5 の結果は真なので true1 > 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つの値を比較するには比較演算子を使う
- 値や評価の結果が真偽値であり、 truefalse がある

公式ドキュメント・参考情報

ダイビックのことをもっと知ってみませんか?