PHPのSwitch文は厳密比較===
ではなく==
で比較される
$param = "2";
switch ($param) {
case 2:
echo "paramはInteger型の2です";
break;
case "2":
echo "paramはString型の2です";
break;
}
これの出力結果はparamはInteger型の2です
String型なのにInteger型と判断されてしまう
コレを解決するには
$param = "2";
switch (true) {
case $param === 2:
echo "paramはInteger型の2です";
break;
case $param === "2":
echo "paramはString型の2です";
break;
}
こうしてやる必要がある
最初は条件式にtrueを入れるなんて!!!!と思ったけど
条件式に "2" をいれるとPHPがその時点で自動的にInteger型に型変換を行ってしまい
厳密な比較ができなくなってしまうようです