PHPの比較演算子には、気をつけるべき点が多くあります。
今回、少しはまったので覚書しておきます。
基本的に、一致を確認する場合には、型まで比較する
===
演算子を使うことが推奨されています。
=== 演算子は、2つの要件を必要とします。
1.型が同一であること。かつ、2.値が同一であること。
この2つの要件を両方満たして、真となります。
逆に、不一致を確認する場合には、
!==
演算子を使います。
!== 演算子は、2つの要件のうち、1つを必要とします。
1.型が同一でないこと。または、2.値が同一でないこと。
このどちらか1つの要件を満たせば、真となります。
つまり、=== は、かつ、という要件が必要ですが、!== は、または、で良いわけです。
基本中の基本ですが、混乱しやすいので覚書しておきます。
なお、型については、PHPマニュアルにかなり詳しく記述されています。
比較演算子
http://www.php.net/manual/ja/language.operators.comparison.php
型の相互変換
http://www.php.net/manual/ja/language.types.type-juggling.php
型の比較表
http://www.php.net/manual/ja/types.comparisons.php
上記ページは、必読です。
ところで、これらとは別に、型について緩く比較する演算子もあります。
== 演算子ですが、これは使わない方が良いということです。
理由は、気づかないうちに、型が自動変換されて、値も変換されてしまうからです。
マニュアルにも以下の記述があります。
整数値を文字列と比較したり、比較に数値形式の文字が含まれる場合は、文字列が 数値に変換され、数値としての比較を行います。
型の自動変換は、便利なようで、思わぬバグの温床となるようです。
もう一つの、
!= 演算子も、== 演算子ほどではないにしても、バグを生む可能性があります。理由は、やはり、型の自動変換をしているからです。
以上、覚書でした。