「4.6.1完全一致」からのメモ。
PHPには==と===という同一の値かどうかをチェックする比較演算子があります。それぞれの違いは値の型まで含めた比較を行うかどうかです。
- ==は型変換を行い比較を行う
- ===は型変換を行わず比較を行う
==では型変換を行うときに少し癖があるので、それにハマらないように注意が必要です。
値 | 値 | 比較方式 |
---|---|---|
数値 | 数値 | 数値による比較 |
数値形式の文字列 | 数値形式の文字列 | 数値による比較 |
数値形式の文字列 | 数値 | 数値による比較 |
数値形式でない文字列 | 数値 | 数値による比較 |
数値形式の文字列 | 数値形式でない文字列 | 辞書順による比較 |
数値形式でない文字列 | 数値形式ではに文字列 | 辞書順による比較 |
- 数値・数値なので、数値で比較
<?php if(3 == 3){ echo "3 == 3\n";} ?>
3 == 3
- 数値形式の文字列・数値形式の文字列なので、数値に変換して比較
<?php if("3" == "3.0"){ echo "'3' == '3.0'\n"; } ?>
'3' == '3.0'
- 数値・文字列なので、文字列を数値に変換して比較
<?php if(3 == "3"){ echo "3 == '3'\n"; } ?>
3 == '3'
- 数値・文字列なので、文字列を数値に変換して比較
<?php #3hogeを数値に変換すると3になる if(3 == "3hoge"){ echo "3 == '3hoge'\n"; } ?>
3 == '3hoge'
- 数値形式の文字列・数値形式でない文字列なので、辞書順で比較
<?php if("3" == "3hoge"){ echo "'3' == '3hoge'\n"; } else{ echo "'3' != '3hoge'\n"; } ?>
'3' != '3hoge'
- 数値形式でない文字列・数値形式でない文字列なので、辞書順で比較
<?php if("hoge" == "hoge"){ echo "'hoge' == 'hoge'\n"; } ?>
'hoge' == 'hoge'
うーん、かなりややこしいですね。。。僕はこんな感じで覚えておくことにします。
- 右辺左辺のどちらかが数値であれば、数値に変換される
- 右辺左辺のどちらもが数値形式文字列であれば、数値に変換される
- その他は辞書順