プログラミング言語PHPにおける奇妙な型変換 "Type Juggling"。文字列と数値の比較(==
)には要注意。
2022-02-04追記:本記事で取り上げた型変換はPHP 7.4系までの言語仕様。PHP 8.0.0以降ではいずれもfalse
値となる。PHP公式の下方互換性に関するドキュメントや解説記事を参照のこと。
<?php var_dump(0 == "php"); // bool(true) !? var_dump(0 === "php"); // bool(false) ?>
PHP公式マニュアルより言語リファレンス該当箇所を引用。
整数値を文字列と比較したり、比較に数値形式の文字が含まれる場合は、文字列が数値に変換され、数値としての比較を行います。
http://php.net/manual/ja/language.operators.comparison.php
文字列の最初の部分により値が決まります。文字列が、有効な数値データから始まる場合、この値が使用されます。その他の場合、値は 0 (ゼロ) となります。有効な数値データは符号(オプション)の後に、1つ以上の数字 (オプションとして小数点を1つ含む)、オプションとして指数部が続きます。指数部は 'e' または 'E' の後に1つ以上の数字が続く形式です。
http://php.net/manual/ja/language.types.string.php#language.types.string.conversion
関連URL