なぜこれが起こるのですか?
<?php $result = true ;
if($result == 'SOME TEXT')
echo 'why is this true? why is this printed?';
else
echo 'when this should be printed?'
?>
説明してください、私は別の方法を探していません。
式では、ブール値と文字列を比較しています。文字列は強制的にtrue
。
参照:http ://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting
前に述べたように、を使用===
して値とタイプの両方を比較します。
==
の代わりに演算子を使用するためです===
。あなたの場合==
、代わりにオペランドタイプに依存しません===
これは、PHPの自動型変換によるものです。また、タイプ別に比較していないため(===)、TRUEと見なされます。これは空と見なされるもののリストですが、これもFALSEと見なされます。
次のものは空であると見なされます。
""(空の文字列)
0(整数として0)
0.0(フロートとして0)
「0」(文字列として0)
ヌル
FALSE
array()(空の配列)
$ var; (宣言された変数ですが、値はありません)
他のすべては基本的にTRUEと見なされます。
php演算子のドキュメントを見てみました。
あなたの場合、==
「true」のブール値は「SOME TEXT」のテキスト値と等しいが、同じデータ型ではないと言っています。この場合、PHPはtrueを返します。これは、データ型を無視すると、それらが類似していると想定しているためです。
を使用===
した場合、データ型が考慮されるため、falseの値が生成されます。
ブール値と文字列を比較しているため、文字列はブール値に自動変換されます。
PHPのドキュメントによると、そうでないnull
、またはempty
(またはゼロの)文字列はすべてTrueに変換されます。
したがって、比較はTrueTrueのようになります==
。
演算子を使用する場合は===
、両方の値が同じタイプであることも確認しています。
http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting