nullとfalseと空文字”と0
@sakairyota さんのつぶやきを見て、前から気になっていた、これらの比較を試してみました。
$array = array(null, false, '', 0);
こんな配列を用意して、各々比較していくだけです。
比較結果($a == $b)
まず、イコール2つの比較演算子(==)で比較します。
null | false | ” | 0 | |
null | true | true | true | true |
false | true | true | true | true |
” | true | true | true | true |
0 | true | true | true | true |
このようになりました。
結果: 全部同じでtrue
要するに、PHPにおいては、nullもfalseも”も0も同じということです。
比較結果($a === $b)
PHPにおいて等しいを表す、もうひとつの比較演算子、つまりイコール3つの比較演算子(===)を使うとどうでしょうか?
null | false | ” | 0 | |
null | true | false | false | false |
false | false | true | false | false |
” | false | false | true | false |
0 | false | false | false | true |
このようになりました。
結果: ちゃんと区別される
「このふたつの演算子の差は?」というと、「比較する前に型変換を行うか?」です。
つまり、前者「null==false」の比較では、比較対象の型が違うので事前に無理やり型を揃えようとします。その結果、両方とも同じ値になり、比較結果がtrueになります。
一方、後者「null===false」の比較では、比較対象の型が異なる場合、その時点で比較結果をfalseとします。
まとめ
PHPの$a==$bという比較演算子は事前に型の変換を行います。
だから、文字列の’10’と整数の10を比較してもtrueが返ってきます。
あまり細かいことを気にしなくてもプログラミングができて良いのですが、時々この曖昧さにハマってしまうことがあるので注意です。
コメント
[…] けど、「===」で型まで比較した場合は、falseとなります。 以下に詳しい記載があります。 PHPでnullとfalseと空文字と0は同じ? 4つの関数 以下4つの関数について把握しておきましょう。 […]