以下のように記述すると・・
■パターンA
$value = 0;
if($value != 'UNSET'){
echo 'TRUE';
}else{
echo 'FALSE';
}
「TRUE」になると想定していたのですが「FALSE」と判定されました。
$valueの値が「-1」等の場合は正常に「TRUE」と判定されます。
■パターンB
$value = 0;
if($value !== 'UNSET'){
echo 'TRUE';
}else{
echo 'FALSE';
}
比較演算子を「!==」に変更すると想定通り「TRUE」と判定されました。
なぜパターンAの場合は$valueが0の場合「FALSE」と判定されるのでしょうか?
自動型変換が原因です。
型変換させたくなければ!==や===を使います。
http://www.php.net/manual/ja/language.operators.comparison.php
整数値を文字列と比較したり、比較に数値形式の文字が含まれる場合は、文字列が 数値に変換され、 数値としての比較を行います。
=== あるいは !== による比較では型変換は発生しません。 この場合は値だけでなく型も比較します。
早速のご回答有難うございます。
2013/11/12 10:21:22質問とずれるかもしれないですが、すべてにおいて使い分け意識することは
私には難しそうですので、基本的には「!==」を利用したほうが良いのでしょうか?
何か注意点などあればアドバイス頂ければありがたいです。
関数の戻り値などで「ゼロ」と「FALSE」を分けなければならない場面など、
2013/11/12 11:17:48システム上厳密でなければならないときだけ「厳密な比較」を行っています。
そうではない場面では「緩やかな比較」を用いています。
お暇なときにwordpressなどのソースコードをざっと眺めてみることを勧めておきますね。