2012-01-09 14 views

答えて

0

は===を判明本当の結果が表示されます、1つが整数で、もう1つは、彼らがいても、文字列である場合、たとえば10 === 10は、falseになります

問題があります転記された書式から生じる可能性があります。

は私が使用した溶液は:

場合( "$ I" == "$ jの")

彼らは種類に関係なく同じならそれだけでチェックし、このよう

+1

これはPHPの等価演算子の誤解を示しています。 == 2つのオペランドが等しいことをチェックします。 10 == "10"はtrueを返します。 === 2つのオペランドが等しく、同じ型であることを確認するため、10 == "10"はfalseを返しますが、10 === 10はtrueを返します。あなたの '解決策'に二重引用符で囲む必要はありません。 –

+0

私もそう思った。バグを見つけたここでx == yはfalseを与えていました。引用符を追加した後、それは働いた。 –

+0

私はそれがバグだとは思わない、PHPが暗黙的に変数をキャストしているからだ。 'php -r" var_dump((int)'00:15 '); "' 00:15の文字列はint(0)にキャストされ、0と比較されます。 0. –

6

00:15が最初に整数にキャストされ、次に$iと比較されます。 intval()(キャスティングを行う)は最初の非数字文字で停止するので、00:15は0にキャストされます。これはゼロに等しくなります。ここにバグはありません。これは==の演算子の仕組みです。

キャスティングを避けたい場合は、代わりに===を使用してください。

2

==を使用すると、型は比較される前に変換されます。この場合、両方が整数に変換され、数値以外の文字列を整数に変換すると、おそらく0になります。

代わりに===演算子を使用すると、期待した結果が得られます。

1

文字列とint型は、int型のよう比較し00

0

で始まり、まったく奇妙いないがために、そう$jがここに0に変換 - 整数と文字列を比較するとき、最初の1は、比較を整数にキャストされています。型チェックのために===を使用して、