手元のPHP5.3.0で発現。もしかしたら5.2では起こらないかも。
下記は「0 == 'A'」を評価する際にPHP内部で行われていることの推測。
- 式を評価する時に両辺のデータの型が違う場合、暗黙の型変換が行われる。
- その際に、どちらかが数値だと、もう一方も数値に変換して比較しようとする。
- さらに、PHPでは先頭が数字の文字列を数値に変換(キャスト)すると、先頭部分の数値になる(例:"123ABC" → 123)
- さらにさらに、先頭が数字でない文字列を数値型に変換する場合、ゼロになる
これにより、「0 == 'A'」は右辺が数値に変換され、先頭に数字が無いのでゼロになり、「0 == 0」になり、trueになる。
同じように「'A' == 0」も「1 == '1A'」もtrueになる。
「'0' == 'A'」や「0 === 'A'」はfalseになる。
0 件のコメント:
コメントを投稿