ホームページ >バックエンド開発 >PHPチュートリアル >PHP で文字列を 0 と比較すると、True が返される場合と False が返される場合があるのはなぜですか?

PHP で文字列を 0 と比較すると、True が返される場合と False が返される場合があるのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-07 16:23:12408ブラウズ

Why Does Comparing a String to 0 in PHP Sometimes Return True and Sometimes Return False?

文字列と整数の奇妙な比較を理解する

多くのプログラマは、次の 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 マニュアルによると、文字列の数値への変換は次の規則に従います。

  • 文字列に小数点、指数、または「e」文字が含まれる場合、それは浮動小数点数として解釈されます。
  • それ以外の場合、これは整数として解釈されます。

$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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。