本記事では、PHPの条件式で使われる==と===の違いについて解説しています。
- PHPの基本構文からクラス・データベース連携・セキュリティまで学べる
- PHPによるWebアプリ開発の基礎・基本テクニックを学べる
Amazon Kindle Unlimitedに登録すると、月額980円で読み放題だからオススメだよ!
初回30日間は無料だから、まだ登録したことのない人はぜひ試してみてね!
変数名/関数名にもう悩まない!
- 美しいコードが書けるが自然と書けるようになる
- 他の開発者が理解しやすいコードになる
==と===の違い
条件分岐で使用される==と===の違いは、データ型の種類まで比較するかしないかです。データ型とは数値であればint、文字列であればstringのことを指します。
==は、データ型の種類は比較せず値だけを比較します。===は、値とデータ型の種類の両方を比較します。そのため、値とデータ型の種類の両方を比較してくれる===の方を使うことでバグが起きにくいプログラムを作成することが出来ます。
数値と文字列
数値と文字列を==と===を使って比較してみましょう。
<?php
var_dump(100 == '100'); // -> bool(true)
var_dump(100 === '100'); // -> bool(false)
?>
同じ値を比較しているのに==の方はtrueが返され、===の方はfalseが返されました。
この理由は、==の方ではデータ型の比較をしないため純粋に数値の100と文字列の100を比較しています。そのため、どちらも同じ100なのでtrueが返されます。
===の方ではデータ型まで比較するため、数値の100はデータ型のintに属し文字列の100はデータ型のstringに属しているため異なるためfalseが返されます。
数値とブール値
数値とブール値を==と===を使って比較してみましょう。
<?php
var_dump(0 == false); // -> bool(true)
var_dump(0 === false); // -> bool(false)
var_dump(1 == true); // -> bool(true)
var_dump(1 === true); // -> bool(false)
?>
「0 == false」と「1 == true」の比較をするとtrueが返されます。何故、このような比較結果になるのか疑問ですよね。実はtrueとfalseは数値で表すことができ、trueは数値の「1」になりfalseは数値の「0」にあたります。
この理由はから数値の比較だけをする==ではtrueが返され、データ型まで確認する===では数値のintとブール値のboolで異なるためfalseが返されます。