2

なぜこれが起こるのですか?

<?php $result = true ;
    if($result == 'SOME TEXT')
        echo 'why is this true? why is this printed?';        
    else
        echo 'when this should be printed?'
?>

説明してください、私は別の方法を探していません。

4

5 に答える 5

4

式では、ブール値と文字列を比較しています。文字列は強制的にtrue

参照:http ://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

前に述べたように、を使用===して値とタイプの両方を比較します。

于 2013-03-17T15:11:28.390 に答える
1

==の代わりに演算子を使用するためです===。あなたの場合==、代わりにオペランドタイプに依存しません===

于 2013-03-17T15:07:34.590 に答える
0

これは、PHPの自動型変換によるものです。また、タイプ別に比較していないため(===)、TRUEと見なされます。これは空と見なされるもののリストですが、これもFALSEと見なされます

次のものは空であると見なされます。

""(空の文字列)

0(整数として0)

0.0(フロートとして0)

「0」(文字列として0)

ヌル

FALSE

array()(空の配列)

$ var; (宣言された変数ですが、値はありません)

他のすべては基本的にTRUEと見なされます。

于 2013-03-17T15:10:14.760 に答える
0

php演算子のドキュメントを見てみました。

あなたの場合、==「true」のブール値は「SOME TEXT」のテキスト値と等しいが、同じデータ型ではないと言っています。この場合、PHPはtrueを返します。これは、データ型を無視すると、それらが類似していると想定しているためです。

を使用===した場合、データ型が考慮されるため、falseの値が生成されます。

于 2013-03-17T15:17:14.507 に答える
0

ブール値と文字列を比較しているため、文字列はブール値に自動変換されます。

PHPのドキュメントによると、そうでないnull、またはempty(またはゼロの)文字列はすべてTrueに変換されます。

したがって、比較はTrueTrueのようになります==

演算子を使用する場合は===、両方の値が同じタイプであることも確認しています。

http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

于 2013-03-17T15:24:49.547 に答える