yohhoyの日記

技術的メモをしていきたい日記

Type Juggling

プログラミング言語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