php switch文のstring比較に気をつけろ
phpのゆるふわ型比較で引っかかった話
常識なのかもしれませんが、 普段GOとかJavaとか使ってた自分にとってこんなに理不尽なことはないと思ったので書きたい。
暗黙の型変換怖い・・・
事象
$array = [ 'test', 0, ]; foreach ($array as $value) { switch ($value) { case 'test': echo('test!'); break; default: echo('default!'); } }
結果
test!test!
はい。こうなります。やめて・・・
っていうのも型比較がゆるいかららしい。
解決策
foreach ($array as $value) { $stringValue = is_string($value) ? $value : (string)$value switch ($stringValue) { case 'test': echo('test!'); break; default: echo('default!'); } }
ひとまず、型変換したら通ったよ...
みなさんもゆるふわ型変換には気を付けよう。