2009年7月28日火曜日

PHPでは 0 == 'A' がtrueになる

手元のPHP5.3.0で発現。もしかしたら5.2では起こらないかも。

下記は「0 == 'A'」を評価する際にPHP内部で行われていることの推測

  1. 式を評価する時に両辺のデータの型が違う場合、暗黙の型変換が行われる。
  2. その際に、どちらかが数値だと、もう一方も数値に変換して比較しようとする。
  3. さらに、PHPでは先頭が数字の文字列を数値に変換(キャスト)すると、先頭部分の数値になる(例:"123ABC" → 123)
  4. さらにさらに、先頭が数字でない文字列を数値型に変換する場合、ゼロになる

これにより、「0 == 'A'」は右辺が数値に変換され、先頭に数字が無いのでゼロになり、「0 == 0」になり、trueになる。


同じように「'A' == 0」も「1 == '1A'」もtrueになる。

「'0' == 'A'」や「0 === 'A'」はfalseになる。

0 件のコメント:

ブログ アーカイブ

tags