PHPでは文字列型と数値型を比較する場合など、違う型同士の比較は強制的に内部で型変換が行われているらしい。
引用:
PHPマニュアル PHP:比較演算子
なので、↓のがtrueになる。
if ("1234abc" == 1234) {
echo 'true';
} else {
echo 'false';
}
これはPHPのバグではなくて仕様との事。
内部的に下記のようになっている。
if ((int)"1234abc" == 1234) {
echo 'true';
} else {
echo 'false';
}
(int)でint型にキャストされるため。
echo (int)"1234abc";すれば1234が出力される。
文字列型をint型にキャストすると以下のようになる。
echo (int)"1234abc"; //1234
echo (int)"0z1234abc"; //0
echo (int)"01234abc"; //1234
echo (int)" 1234abc"; //1234
echo (int)"abc"; //0
つまり、文字列の先頭が数値ならばそこの値を取得し、そうでなければ0になるとの事。
なので、両辺を""でくくって文字列型にそろえて比較するなどが必要。
ただし、両辺が数値型の場合は例外がある。
if ("1234.0" == "1234") {
echo 'true';
} else {
echo 'false';
}
この場合、文字列型で比較しているのでfalseなると思いきや、ならない。
PHPでは数値形式の文字列を比較する場合、整数として比較されるため。
なので、文字列の比較は"==="を使いましょうというお話。
perlでいうところの文字列比較eqと同じ使い方。
[3回]
PR