PHP の驚くべき文字列と数値の等価性: '0 == "e"' の異常を探る
PHP では、一見無害な比較が可能です。コード スニペットで明らかなように、予期しない結果が生じる以下:
$item['price'] = 0; if ($item['price'] == 'e') { $item['price'] = -1; }
$item['price'] を 0 に初期化しているにもかかわらず、'e' が価格に割り当てられると、if 条件は不可解にも true と評価され、0 を文字列 'e' と同等として扱います。 .
啓示: 型キャストと PHP の == Operator
原因は、比較を実行する前にオペランドを同じ型にキャストしようとする PHP の == 演算子にあります。この場合、整数 0 を文字列にキャストします。 「e」は有効な整数ではないため、0 になり、誤った一致が発生します。
解決策: 厳密な比較を採用
このような異常を回避するには、 == の代わりに === 演算子を使用することをお勧めします。 === は、型の強制を含まない厳密な比較を実行し、同じ型の値のみが等しいとみなされるようにします。
PHP 8 のゲームを変えるシフト
以前のバージョンから大きく変わって、PHP 8 では文字列と数値の比較の動作が変更されました。 PHP 8 では、数値を文字列にキャストする代わりに、可能な限り文字列を数値にキャストします。この変更は期待に沿ったもので、0 と 'e' が等しいとはみなされなくなりました。
要約
PHP の == 演算子は、比較するときに驚くべき結果を引き起こす可能性があります。型キャストによる文字列と数値。予期しない動作を防ぐには、=== 演算子を使用して厳密な比較を行うことが重要です。さらに、PHP 8 では文字列と数値の比較に対するアプローチが改訂され、コードの一貫性と正確性が強化されました。
以上がPHP の `0 == 'e'` が True と評価されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。