2

これはコードです:

$s = 0;
$d = "dd";

if ($s == $d) {
    var_dump($s);
    die(var_dump($d));
}

結果は次のとおりです。

int 0

string 'dd' (length=2)

その理由を説明してください。

なぜ($s == $d)結果が真であるのですか?

もちろん、===使用するとfalseになりますが、なぜこの状況が必要なの===ですか?どちらの状況でもfalseを返す必要はありませんか?

4

6 に答える 6

4

(int)$d等しいので00=0

===異なる文字タイ(string)には厳密な比較を使用する必要があります(int)

あなた$dは自動的に変換され(int)て、比較するものがあります。

于 2012-09-14T09:06:50.593 に答える
4

数値を文字列と比較すると、文字列は最初に数値にジャグリングされます。この場合、ddはジャグリングされることになります。0これは、それがtrueに等しいことを意味します(0==0)

コードを次のように変更すると、次のようになります。

 <?php 
 $s = 1;
 $d = "dd";
 if ($s == $d)
 {
    var_dump($s);
    die(var_dump($d));
 }
 ?>

ifあなたはそれがステートメントをまったく通過しないことに気付くでしょう。

比較演算子型ジャグリングを読んで、詳細を知ることができます。

于 2012-09-14T09:07:47.253 に答える
2

文字列「dd」はintに変換されるため、0に変換されます。

もう一つの例 :

if ( "3kids" == 3 )
{
      return true;
}

はい、「3kids」は3に変換されるため、これはtrueを返します。

===アイテムを同じタイプに自動変換しません。

また:0 == falseは正しいですが、そうで0 === falseはありません。

参照: http: //php.net/manual/en/language.types.type-juggling.php

于 2012-09-14T09:07:12.617 に答える
2

文字列は数値に解析されようとし0、正しい数値形式でない場合は返されます。

于 2012-09-14T09:07:30.167 に答える
2

phpのウェブサイトで見られるように:http: //php.net/manual/en/language.operators.comparison.php

var_dump(0 == "a"); // 0 == 0 -> true
于 2012-09-14T09:07:48.090 に答える
2

PHPでは、==「おそらく等しい」と発音します。

と比較すると==、PHPはファイルタイプを調整して一致するものを見つけようとします。

数値を含まない文字列は0、intとして評価されるときに評価されます。

したがって、それらは等しいです。

于 2012-09-14T09:07:54.033 に答える