人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPの比較演算子に関する質問です。
以下のように記述すると・・

■パターン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」と判定されるのでしょうか?

●質問者: gelgelgel
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● うぃんど
●100ポイント ベストアンサー

自動型変換が原因です。
型変換させたくなければ!==や===を使います。
http://www.php.net/manual/ja/language.operators.comparison.php

整数値を文字列と比較したり、比較に数値形式の文字が含まれる場合は、文字列が 数値に変換され、 数値としての比較を行います。

=== あるいは !== による比較では型変換は発生しません。 この場合は値だけでなく型も比較します。


型の比較表
http://www.php.net/manual/ja/types.comparisons.php


gelgelgelさんのコメント
早速のご回答有難うございます。 質問とずれるかもしれないですが、すべてにおいて使い分け意識することは 私には難しそうですので、基本的には「!==」を利用したほうが良いのでしょうか? 何か注意点などあればアドバイス頂ければありがたいです。

うぃんどさんのコメント
関数の戻り値などで「ゼロ」と「FALSE」を分けなければならない場面など、 システム上厳密でなければならないときだけ「厳密な比較」を行っています。 そうではない場面では「緩やかな比較」を用いています。 お暇なときにwordpressなどのソースコードをざっと眺めてみることを勧めておきますね。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ