文字列と整数の比較の異常
PHP で文字列と整数を比較すると、予期しない結果が発生する可能性があります。次のコードを考えてみましょう。
$test1 = "d85d1d81b25614a3504a3d5601a9cb2e"; $test2 = "3581169b064f71be1630b321d3ca318f"; if ($test1 == 0) echo "Test 1 is Equal!?"; if ($test2 == 0) echo "Test 2 is Equal!?"; // Returns: Test 1 is Equal!?
驚くべきことに、$test1 の比較は、数値ではないにもかかわらず、true と評価されます。この異常は、PHP の緩い型変換ルールに起因します。
文字列から数値への変換
PHP マニュアルによると、
「文字列が評価されるとき」数値コンテキストでは、結果の値と型は次のように決定されます。
文字列が有効な数値データで始まる場合、値は文字列の最初の部分によって与えられます。これが使用される値になります。それ以外の場合、値は 0 (ゼロ) になります。"
異常の説明
この例では、$test1 には次の値が含まれていません。小数点、指数、または先行ゼロ。したがって、初期値 0 の整数として解釈されます。0 は PHP の整数 0 と等しいため、比較は true と評価されます。
$test2 が失敗する理由
文字列 $test2 には数字以外の文字も含まれています。ただし、数字で始まるため、その初期値は 3581169 の整数として解釈されます。この整数は 0 に等しくないため、誤った比較が行われます。
型異常の回避
これらの異常を防ぐために、常に厳密な型比較を使用してください。提供されている例では、コードを次のように書き換えることができます:
if ($test1 === "0") echo "Test 1 is Equal!"; if ($test2 === "0") echo "Test 2 is Equal!?";
厳密な比較演算子 === を使用することで、値が同じ型であることが保証され、予期しない結果が発生するのを防ぎます。
以上がPHP の緩やかな型比較により、文字列と整数を比較するときに予期しない結果が生じるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。