2009-05-15 18 views
2
$foo = 0; 

if($foo == 'on') $foo = 1; 

echo $foo; 

上記のコードは "0"を出力すると予想されます。しかし、それはどういうわけか$foo == 'on'の結果はTRUEですが、これは明らかに間違っています。式を$foo === 'on'に置き換えると正しい答えが得られるので、これはいくつかの入力の問題かもしれない疑いが確認されたようです。PHPで奇妙なブール式を解く

それにもかかわらず、どのようにPHPは$foo'on'も同じタイプでない場合$foo'on'だったと思うことができますか?これはバグか奇妙な機能ですか?

答えて

3

phpは文字列の緩やかな比較(==)であり、int 0はTrueと評価されます。厳密な比較(===)は同じ型を比較しますが、ブース変数が文字列かintかどうか比較されます。しかし、これはfalseと評価されます。$ fooはintで、 'on'は文字列です。 はまた、php.netの比較表を参照してください:http://php.net/types.comparisons

3

this is a documented behaviour

あなたは、文字列と整数を比較すると、文字列を数値に変換されます。 2つの数値ストリングを比較すると、それらは整数として比較されます。これらの規則はswitch文にも当てはまります。