PHPのswitch文でcase 0が実行される仕組みを解説
PHPのswitch文とcase 0の意外な挙動
PHPは「緩やかな型付け(Loose Typing)」を採用している言語です。この特性により、switch文でcase 0と比較を行うと、文字列は暗黙的に最も近い整数へと変換され、比較が行われます。
例えば、次のようなswitch式を考えてみましょう。
switch ("match")ここで、まずcase 0とのマッチングを定義します。
case 0:
echo " 0 with match";
break;続けて、ゼロ以外のcaseも用意しておきます。
case "match":
echo "match successful";
break;なぜcase 0がマッチするのか
PHP 7以前では、文字列と整数を緩やかに比較(==)すると、文字列が数値に変換されます。アルファベットなどで始まる文字列"match"は数値として解釈できないため0に変換され、結果としてcase 0が先にマッチしてしまうのです。
サンプルコード
<!DOCTYPE html>
<html>
<body>
<?php
switch ("match") {
case 0:
echo " 0 with match";
break;
case "match":
echo "match successful";
break;
}
?>
</body>
</html>実行結果
0 with match
出力を見ると、文字列"match"を渡しているにもかかわらず、「0 with match」が表示されています。これは、case "match"よりも先にcase 0が評価され、緩い型比較によってマッチしたためです。
注意:PHP 8以降での変更点
PHP 8からは、数値と文字列の比較ルールが変更されました。数値形式でない文字列は自動的に数値へ変換されなくなり、"match" == 0はfalseを返すようになっています。そのため、この記事で紹介している挙動はPHP 7以前のバージョン特有のものである点に注意してください。意図しないマッチングを防ぐためには、switch文で厳密な比較を行えるよう、事前に型を揃えておくことが推奨されます。
-
WhatsAppをアンインストールするとどうなる?アカウント削除との違いを徹底解説
WhatsAppをアンインストールすると、実際に何が起こるのか考えたことはありますか?誤って削除してしまった場合でも、何らかの理由で意図的に消す場合でも、アンインストールした瞬間にアプリはスマホから姿を消します。連絡先のリストにはあなたの名前が残ったままですが、メッセージは届かなくなります。音声通話もビデオ通話も、さらにはグループ通話でさえも、あなたの端末にはつながりません。第1部:アカウント削除とアンインストールの違いヘビーユーザーであれば、「アプリを消して静かな時間を取り戻したらどうなるだろう」と思ったことがあるはずです。昨今のSNSアプリは通知が絶えず鳴り響き、非常に煩わしいものです。テ
-
Skypeが遅い・重いときの原因と対処法を徹底解説
Skypeは今や世界中で利用されている定番のコミュニケーションツールです。Webベースの通信プラットフォームが数多く登場しているにもかかわらず、Skypeはリモートワーカーの多くにとって依然として第一の選択肢であり続けています。その理由は、シンプルで使いやすい操作性にあります。 しかし、どんなアプリにもトラブルはつきものです。「Skypeが遅い」という問題も、このプラットフォームで起こりうる典型的なトラブルの一つです。 通話中に相手の映像が突然消えてしまったり、Skypeがフリーズして奇妙な音声や映像が流れたりすることもあります。頻繁に利用している方なら、ビデオ通話で相手の画面が乱れる様子を目