比較演算子「==」は型変換を自動で行ってしまう。
型の扱いが非常に曖昧であることで有名なPHPでは、他の言語と同じく「==」を使って比較を行うと、型変換を勝手に行って比較を行ってしまいます。
<?php
$a = 100;
$b = "100"
var_dump($a == $b)
〜出力〜
bool(true)
$aはstring形、$bはint型なので、falseを返して欲しいところですが、型変換をして、値が等しいのでtrueとなってしまいます。
同じく下記のように0とnullを比較した場合にもtrueとなってしまいます。
コードを書いている中で0とnullは別として扱いたいことが多いため、バグの発生源となってしまいます。
<?php
$a = 0;
$b = null;
var_dump($a == $b)
以下のような場合も悲しいことにtrueとなってしまいます。。
<?php
$a = "abcde";
$b = 0;
var_dump($a == $b)
否定演算子も同じく「!=」と書いてしまうと型変換した後の比較となってしまいます。
PHPでは比較演算子は「===」を使おう
「===」を使うと、値だけでなく、型の比較までもしてくれるようになります。
上記のように曖昧な比較をされないためにも比較演算子は「===」を使うようにしましょう。
(C言語などになれてしまっている人にとっては=が3つ並ぶことは気持ち悪いかもしれませんが。。。)
ちなみに配列に値が存在するかどうか比較するin_array関数ではデフォルトでは「==」での比較を行ってしまうので注意が必要です。第3引数にtrueを指定すると初めて「===」での比較が行えます。