PHP ===とは?意味をわかりやすく簡単に解説

text: XEXEQ編集部


PHP ===とは

PHP ===は、PHPにおける厳密等価演算子の一つです。二つの値が同じ型であり、かつ同じ値を持つ場合にtrueを返します。

===演算子は、値だけでなく型も比較するため、厳密な等価性を確認することができます。例えば、数値の1と文字列の'1'は==では等しいと判定されますが、===では等しくないと判定されます。

PHPでは、==のような等価演算子の他に===のような厳密等価演算子が用意されています。===を使うことで、予期せぬ型の不一致によるバグを防ぐことができます。

また、===の反対の演算子として!==があります。!==は二つの値が異なる型または異なる値を持つ場合にtrueを返します。

PHPの比較演算子には、==や===の他にも<、>、<=、>=などがあります。用途に応じて適切な演算子を選択することが大切です。

PHP ===の使い方

PHP ===の使い方について、以下3つを簡単に解説していきます。

  • PHP ===の基本的な使い方
  • PHP ===を使った条件分岐
  • PHP ===と==の使い分け

PHP ===の基本的な使い方

PHP ===は、二つの値を比較して、型と値が共に等しい場合にtrueを返します。例えば、$a === $bという式は、変数$aと$bの型と値が完全に一致する場合にtrueになります。

===の左右に比較したい値を置きます。値には変数、リテラル、式などを使用できます。以下は===の基本的な使用例です。


$a = 1;
$b = '1';
var_dump($a === $b); // bool(false)

PHP ===を使った条件分岐

PHP ===はif文やwhile文などの条件式で使われることが多いです。===を使うことで、型と値が厳密に一致する場合だけ特定の処理を実行させることができます。

以下は、===を使ったif文の例です。$roleが'admin'の場合だけ特別な処理を行っています。


if ($role === 'admin') {
    // 管理者の場合の処理
} else {
    // 一般ユーザーの場合の処理
}

===を使わずに==で比較していた場合、$roleが数値の0や文字列の'0'でも条件が満たされてしまいます。厳密な比較が必要な場合は===を使うのが確実です。

PHP ===と==の使い分け

PHPには値の等価性を比較する演算子として、===と==の2種類があります。===は型と値が厳密に等しい場合にtrueを返すのに対し、==は型が異なっていても、値が等しいと見なせる場合にtrueを返します。

例えば、数値の1と文字列の'1'を比較した場合、==ではtrueになりますが、===ではfalseになります。どちらを使うべきかは状況によって異なります。

基本的には、型の不一致によるバグを防ぐために===を使うのが望ましいです。ただし、型が異なる値を同等に扱いたい場合は、意図的に==を使うことも考えられます。状況に応じて使い分けましょう。

PHP ===の注意点

PHP ===の注意点について、以下3つを簡単に解説していきます。

  • PHP ===とオブジェクトの比較
  • PHP ===と浮動小数点数の比較
  • PHP ===とnullの比較

PHP ===とオブジェクトの比較

PHP ===でオブジェクトを比較する場合、二つの変数が同じオブジェクトを参照している場合にのみtrueを返します。たとえ二つのオブジェクトのプロパティが同じ値を持っていても、別のインスタンスであれば===ではfalseになります。

オブジェクトの等価性を調べるには、===の代わりに==を使うのが一般的です。==はオブジェクトの型と値が等しい場合にtrueを返します。ただし、==でもオブジェクトの参照先までは比較されません。


$obj1 = new stdClass();
$obj2 = new stdClass();
var_dump($obj1 === $obj2); // bool(false)
var_dump($obj1 == $obj2);  // bool(true)

PHP ===と浮動小数点数の比較

PHP ===で浮動小数点数を比較する場合は注意が必要です。浮動小数点数は、内部的に2進数で表現されるため、丸め誤差が生じることがあります。

例えば、0.1 + 0.2 === 0.3という比較は、直感に反してfalseになります。これは、0.1 + 0.2の結果が厳密には0.3ではないためです。


var_dump(0.1 + 0.2 === 0.3); // bool(false)

浮動小数点数の比較には、絶対誤差や相対誤差を利用するのが一般的です。厳密な比較が必要な場合は、整数に変換するなどの工夫が必要です。

PHP ===とnullの比較

PHP ===でnullを比較する場合は、===の右辺にはnullリテラルを使う必要があります。nullリテラル以外の値と比較した場合は常にfalseを返します。

以下は、===を使ったnullチェックの例です。$valueがnullの場合にのみtrueになります。


if ($value === null) {
    // $valueがnullの場合の処理
}

nullとの比較には、isset()を使うという方法もあります。isset()は変数が定義されていて、nullでない場合にtrueを返します。状況に応じて適切な方法を選択しましょう。

PHP ===のユースケース

PHP ===のユースケースについて、以下3つを簡単に解説していきます。

  • PHP ===を使った入力値のバリデーション
  • PHP ===を使った設定値の比較
  • PHP ===を使った配列のキーの存在チェック

PHP ===を使った入力値のバリデーション

PHP ===は、ユーザーからの入力値のバリデーションに利用できます。例えば、フォームから送信された値が期待する型であるかを厳密にチェックする場合などです。

以下は、===を使って数値型の入力値をチェックする例です。$ageが数値型の文字列である場合にのみtrueになります。


if ($_POST['age'] === strval(intval($_POST['age']))) {
    // 数値の場合の処理
} else {
    // 数値でない場合の処理
}

このように、===を使うことで入力値の型を厳密にチェックでき、予期せぬバグを防ぐことができます。ユーザー入力のバリデーションは、アプリケーションのセキュリティ上も重要な処理です。

PHP ===を使った設定値の比較

PHP ===は、設定値の比較にも利用できます。例えば、環境変数や定数の値が期待通りであるかを確認する場合などです。

以下は、===を使って環境変数の値をチェックする例です。APP_ENVがproductionである場合にのみtrueになります。


if (getenv('APP_ENV') === 'production') {
    // 本番環境の場合の処理
} else {
    // 開発環境の場合の処理
}

環境変数は文字列型で扱われるため、===で厳密に比較することが大切です。こうすることで、想定外の値による処理の誤動作を防げます。

PHP ===を使った配列のキーの存在チェック

PHP ===は、配列のキーの存在チェックにも利用できます。isset()と組み合わせることで、キーが存在し、かつ値がnullでないことを確認できます。

以下は、===とisset()を使って配列のキーの存在をチェックする例です。$dataに'key'というキーが存在し、値がnullでない場合にのみtrueになります。


if (isset($data['key']) && $data['key'] !== null) {
    // キーが存在し、値がnullでない場合の処理
}

配列のキーの存在チェックには、array_key_exists()という関数もあります。ただし、array_key_exists()はキーが存在すればtrueを返すため、値がnullの場合も考慮する必要があります。状況に応じて適切な方法を選択しましょう。

※上記コンテンツはAIで確認しておりますが、間違い等ある場合はコメントよりご連絡いただけますと幸いです。

「プログラミング」に関するコラム一覧
「プログラミング」に関するニュース
「プログラミング」に関するニュース一覧
ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。