2011-10-24 20 views
2

いつもフレークなXdebugはmoのフリッツにあります(通常のサービスはできるだけ早く再開します)ので、 "echo by debug"に減らしました。不平等テストが失敗するのはなぜですか?

echo($path_info['filename'] . ' ' . $licence['issue_timestamp'].'<br>');  
if ($path_info['filename'] != $licence['issue_timestamp']) 
{ 
die('They are NOT equal'); 
    $_SESSION['error_messages'][] = 'This licence file has been copied'; 
    return False; 
} 
else 
die('They are equal'); 

出力

1319266557_ 1319266557 
They are equal 

私が間違っているの何任意のアイデア?アンダースコアに何か特別なものがありますか?

答えて

5

を試してみてください。他の場所でそのページ上の、それは言及:あなたは、文字列と数値を比較したり、比較は、数値、文字列が含まれている場合

、その後、各文字列は数および数値的に行われた比較に変換されます。これらの規則はswitch文にも当てはまります。比較が===または!==の場合は、タイプと値を比較するため、タイプ変換は行われません。

そして例があなたのケースで何が起こっているかのように死んで景品です:文字列はhereを見ることができ、整数に変換する方法の面では

var_dump(100 == "1e2"); // 100 == 100 -> true

文字列に '。'、 'e'、または 'E'の文字が含まれていない場合、数値は整数型の制限に適合します( PHP_INT_MAX)、文字列は整数として評価されます。それ以外の場合はフロートとして評価されます。

値はの文字列の最初の部分で与えられます。

例:$foo = 1 + "10 Small Pigs"; // $foo is integer (11)

"123_" が "123" (A)に等しい理由です。要するに、値とタイプが同じであることを保証するので、!==を使用してください。


(a)のonline PHP executorを参照してください: 他のポスト後enter image description here

+1

+1とその答え。私はあなたを愛し、あなたの赤ちゃんを持ってほしい – Mawg

+3

それはあなたが女性なら何とか私の妻にそれは良い考えであることを納得させることができます。最初のものは可能ですが、私は2番目のものを見ることができません:-) – paxdiablo

+1

それは数える思考です;-)(私の妻がそれをどちらかに行くと思ってはいけません;-) – Mawg

3

PHPが行う骨頭の事の一つは、== only compares values "after type juggling"です。これが意味することは、最も普通の人々が==と考えるものは、実際にはPHPで===です。

$a != $b Not equal TRUE if $a is not equal to $b after type juggling.

そして "タイプジャグリングは" 強大な疑わしいもの:docs状態

$path_info['filename'] !== $licence['issue_timestamp']. 
+0

1申し訳ありませんが、1分、彼は答えを取得します。しかし、ありがとう。 – Mawg

関連する問題