なぜこれ
var_dump(0 == "string");
これを出力します
bool(true)
==
演算子のコンテキストは、この一連の規則に従って変換0
されるはずではFALSE
ありませんか?"string"
TRUE
なぜこれ
var_dump(0 == "string");
これを出力します
bool(true)
==
演算子のコンテキストは、この一連の規則に従って変換0
されるはずではFALSE
ありませんか?"string"
TRUE
var_dump(0 == "string");
数値(整数)比較を行っています
0 は整数であるため、「文字列」は整数に変換されて比較され、整数値 0 に等しいため、0 == 0 が true になります。
詳細については、PHP ドキュメントのさまざまなタイプの表との比較を参照してください。
ここに示す表は、あなたのケースにより適しています。
TRUE
と比較0
して示します"php"
。
比較内では、両方のオペランドをブール値に変換しませんが、一方のオペランドは他方のオペランドの型と一致するように変換されます。あなたの場合、文字列は整数に変換され、別の結果になります0
。これにより が0 == 0
得られ、true が得られます。
これらは同じ型ではありません。同じ型かどうかを確認したい場合は === を使用してください。
数値を文字列と比較する場合、または比較に数値文字列が含まれる場合、各文字列は数値に変換され、数値として比較が実行されます。
"string"
は数値形式ではないため、 に変換され0
ます。
比較中に、文字列は整数に変換されます。
var_dump(0);
var_dump((int)"string");
var_dump(0 == "string");
最後の行は自動的に次のように変換されます:
var_dump(0 == (int)"string");
したがって、この戻り値は次のようになります。
int(0)
int(0)
bool(true)
bool(true)
最初にこのサイトの比較表を探しています: http://php.net/manual/en/language.operators.comparison.php。へのキャストbool
はここでは適用されません。
Operand 1 Operand 2
...
string, resource string, resource Translate strings and resources to numbers,
or number or number usual math
"string"
等しい数にキャストし0
ます。