0
0

More than 3 years have passed since last update.

phpの比較演算子「==」は予想外の動きをするで!比較は「===」を使おう

Posted at

比較演算子「==」は型変換を自動で行ってしまう。

型の扱いが非常に曖昧であることで有名な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を指定すると初めて「===」での比較が行えます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0