比較演算子===について間違った認識をしていたのでメモしておく。
オペランドとは
コンピュータプログラミングにおいて、演算の対象となる値や変数のことである。「被演算子」と訳されることもある。
演算内容をあらわす記号などは「演算子」または「オペレータ(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用語辞典
