2017-05-12 6 views
1
$vartest = 0; 

if ($vartest == "This can't be TRUE") { echo "But it is TRUE"; } 

>> But it is TRUE 

私のプログラムのどこかで間違った宣言を行い、この奇妙な動作を発見しました。これはTRUEにはなりません

ほとんどの場合、$ vartest = ""が使用されましたが、$ vartest = 0のどこかがプログラムに入っていました。

私はエラーを見つけるのに数時間を費やしたので、私はこれを認識のためだけに投稿しています。

ただ1つの質問です。変数$ vartestは空ですが、なぜPHPはこのTRUEを見つけますか?

+0

チェック[この](http://stackoverflow.com/questions/6843030/why-does-php-consider-0-to-be-equal-to-a-string) –

+0

てみてください。これを試してみてください'echo(int)"これは真実ではありません ";そして、その文字列をintにキャストすると** ** **;したがって、あなたが最初に '$ vartest'をintと宣言して以来、それが起こっています。 – CD001

+0

==の代わりに===を使用してください。なぜなら、通常の演算子は型を比較して型をキャストしないからです。しかし、===はアイテムの種類を考慮に入れます。 – JYoThI

答えて

-1

等価と型を "==="で比較し、型変換と等しいかどうかを "=="だけでなく比較しなければなりませんでした。

$vartest = 0; 

if ($vartest === "This can't be TRUE") { echo "But it is TRUE"; } 
関連する問題