PHPの比較演算子==と===の違い

blue elephant plush toy on black laptop computer

比較演算子===について間違った認識をしていたのでメモしておく。

オペランドとは

コンピュータプログラミングにおいて、演算の対象となる値や変数のことである。「被演算子」と訳されることもある。
演算内容をあらわす記号などは「演算子」または「オペレータ(operator)」という。例えば「A+10」という式では、「A」と「10」がオペランドで、「+」がオペレータである。

比較演算子==

比較演算子==は、等価比較を行う。それぞれのオペランドが等しいときにtrueを返す。
オペランドは比較前に同じ型に変換される。

== による緩やかな比較

`TRUE` `FALSE` 1 0 -1 “1” “0” “-1″ `NULL` array() “php” “”
`TRUE` `TRUE` `FALSE` `TRUE` `FALSE` `TRUE` `TRUE` `FALSE` `TRUE` `FALSE` `FALSE` `TRUE` `FALSE`
`FALSE` `FALSE` `TRUE` `FALSE` `TRUE` `FALSE` `FALSE` `TRUE` `FALSE` `TRUE` `TRUE` `FALSE` `TRUE`
1 `TRUE` `FALSE` `TRUE` `FALSE` `FALSE` `TRUE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE`
0 `FALSE` `TRUE` `FALSE` `TRUE` `FALSE` `FALSE` `TRUE` `FALSE` `TRUE` `FALSE` `TRUE` `TRUE`
-1 `TRUE` `FALSE` `FALSE` `FALSE` `TRUE` `FALSE` `FALSE` `TRUE` `FALSE` `FALSE` `FALSE` `FALSE`
“1” `TRUE` `FALSE` `TRUE` `FALSE` `FALSE` `TRUE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE`
“0” `FALSE` `TRUE` `FALSE` `TRUE` `FALSE` `FALSE` `TRUE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE`
“-1″ `TRUE` `FALSE` `FALSE` `FALSE` `TRUE` `FALSE` `FALSE` `TRUE` `FALSE` `FALSE` `FALSE` `FALSE`
`NULL` `FALSE` `TRUE` `FALSE` `TRUE` `FALSE` `FALSE` `FALSE` `FALSE` `TRUE` `TRUE` `FALSE` `TRUE`
array() `FALSE` `TRUE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `TRUE` `TRUE` `FALSE` `FALSE`
“php” `TRUE` `FALSE` `FALSE` `TRUE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `TRUE` `FALSE`
“” `FALSE` `TRUE` `FALSE` `TRUE` `FALSE` `FALSE` `FALSE` `FALSE` `TRUE` `FALSE` `FALSE` `TRUE`

比較演算子===

比較演算子=は、等価および型比較を行う。オペランドが両方とも等しく、型も同じ場合にtrueを返す。比較演算子には暗黙の型変換があるため、一般的には比較を行う際にはこちらの方が安全である。

=== による厳密な比較

`TRUE` `FALSE` 1 0 -1 “1” “0” “-1″ `NULL` array() “php” “”
`TRUE` `TRUE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE`
`FALSE` `FALSE` `TRUE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE`
1 `FALSE` `FALSE` `TRUE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE`
0 `FALSE` `FALSE` `FALSE` `TRUE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE`
-1 `FALSE` `FALSE` `FALSE` `FALSE` `TRUE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE`
“1” `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `TRUE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE`
“0” `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `TRUE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE`
“-1″ `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `TRUE` `FALSE` `FALSE` `FALSE` `FALSE`
`NULL` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `TRUE` `FALSE` `FALSE` `FALSE`
array() `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `TRUE` `FALSE` `FALSE`
“php” `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `TRUE` `FALSE`
“” `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `FALSE` `TRUE`

まとめ

==では暗黙的な型変換が行われるので、暗黙的な型変換を意図していないコードでは===を使用する。

参考
PHP: PHP 型の比較表 – Manual
オペランドとは 【 operand 】 – 意味/解説/説明/定義 : IT用語辞典

投稿者 SmokyDog

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です