ホームページ  >  記事  >  バックエンド開発  >  PHP 比較演算子 bug_PHP チュートリアル

PHP 比較演算子 bug_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-14 10:09:38714ブラウズ

質問
まず、PHP のサンプル コードを示します。以下の結果が発生する理由を十分に理解できれば、このブログで時間を無駄にする必要はありません。PHP 初心者が犯しやすい間違いに注意する方法をここに示します。

[php]

var_dump("abcdefg" == "0") // bool(false)
var_dump("abdsafd" == 0); // bool(true)

var_dump("abcdefg" == "0") // bool(false)

; var_dump("abdsafd" == 0); // bool(true)
上記の結果がよくわからない場合は、ブログに従って学習を続けてください。

比較演算子
比較演算子は、その名前が示すように、2 つの値を比較できます。

比較演算子の例 名前 結果
$a == $a が $b に等しい場合、$b は TRUE に等しくなります
$a === $b congruent $a が $b に等しく、それらの型も同じ場合は TRUE
$a != $a が $b に等しくない場合、$b は TRUE に等しくない
$a が $b に等しくない場合、$a <> $b は TRUE に等しくない
$a !== $b は合同ではありません $a が $b と等しくない場合、またはそれらの型が異なる場合は TRUE になります
$a が $b より小さい場合、$a < $b は TRUE より小さいです
$a が $b より大きい場合、$a > $b は TRUE より大きくなります
$a $a >= $b は、$a が $b 以上の場合に TRUE 以上になります

注:

整数と文字列を比較すると、文字列は整数に変換されます
2 つの数値文字列を比較する場合は、整数として比較します

この時点で、上記の PHP コードについて説明します。var_dump("abcdefg" == "0") は、c の strcmp 関数に対応する 2 つの文字列の比較であるため false である必要があります。ただし、var_dump("abdsafd" == 0) が true の場合は、文字列を整数に変換するルールを学ぶ必要があります

文字列を整数に変換します
文字列が数値コンテキストで使用される場合、結果と型は次のようになります:

文字列に「.」、「e」、または「E」が含まれておらず、数値が整数型の制限 (PHP_INT_MAX で定義) に準拠している場合、文字列は整数とみなされ、浮動小数点とみなされます。他のケース

文字列の開始部分がその値を示します。文字列が有効な数値で始まる場合は、その数値を直接使用できます。それ以外の場合、値は 0 です。有効な値は、記号、それに続く 1 つ以上の数字 (小数点付きの場合もあります)、その後に「e」または「E」などのオプションの指数記号、その後に 1 つまたはさらに多くの桁。

サンプルコード:

[php]

$foo = 1 + "10.5" // $foo は float (11.5) です
; $foo = 1 + "bob-1.3e3" // $foo は整数 (1) です
$foo = 1 + "bob3" // $foo は整数 (1) です
; $foo = 1 + "10 匹の小さな豚" // $foo は整数 (11) です
$foo = 4 + "10.2 Little Piggies" // $foo は float (14.2) です
$foo = "10.0 pigs " + 1; $foo は float (11) です
$foo = "10.0 pigs " + 1.0; $foo は float (11) です
?>

$foo = 1 + "10.5" // $foo は float (11.5) です

; $foo = 1 + "bob-1.3e3" // $foo は整数 (1) です
$foo = 1 + "bob3" // $foo は整数 (1) です
; $foo = 1 + "10 匹の小さな豚" // $foo は整数 (11) です
$foo = 4 + "10.2 Little Piggies" // $foo は float (14.2) です
$foo = "10.0 pigs " + 1; $foo は float (11) です
$foo = "10.0 pigs " + 1.0; $foo は float (11) です
; ?>
これは、 var_dump("abcdefg" == 0) が true であることを完全に説明できるはずです。これは、0==0 が true であるため、比較演算子が最初に "abcdefg" を整数 0 に強制するためです

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/477619.html技術記事質問の最初の選択肢は、次の結果が発生する理由を完全に理解している場合は、このブログで時間を無駄にする必要はありません...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。