文字列と整数の奇妙な比較を理解する
多くのプログラマは、次の PHP コードの動作に困惑しています:
$test1 = "d85d1d81b25614a3504a3d5601a9cb2e"; $test2 = "3581169b064f71be1630b321d3ca318f"; if ($test1 == 0) echo "Test 1 is Equal!?"; if ($test2 == 0) echo "Test 2 is Equal!?";
驚くべきことに、このコードは「テスト 1 は 等しい!?"のみ。なぜこのようなことが起こるのでしょうか?
疎比較と文字列から数値への変換
この動作を理解する鍵は、PHP の疎比較メカニズムにあります。 == 演算子を使用して文字列を整数と比較する場合、PHP は文字列を数値に変換しようとします。
PHP マニュアルによると、文字列の数値への変換は次の規則に従います。
$test1 の場合、比較 $test1 == 0 は文字列 $test1 を整数として評価し、結果は 0 になります。したがって、これは次の条件を満たします。等価条件と出力「Test 1 is Equal!?」
例外Rule
ただし、$test2 の場合、無効な文字 'b' が含まれているため、整数変換は失敗します。その結果、PHP は整数コンテキストで $test2 を 0 に変換し、比較 $test2 == 0 false を行います。
結論
文字列の比較における明らかな矛盾整数への変換は、PHP の緩い比較ルールとその文字列から数値への変換メカニズムを理解することで解決されます。文字列を 0 と比較する場合、変換ルールによって比較が true か false になるかが決まります。
以上がPHP で文字列を 0 と比較すると、True が返される場合と False が返される場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。