- ベストアンサー
phpのswitchについて教えて下さい brea
phpのswitchについて教えて下さい breakがないとなぜその後のechoを全て表示してしまうんでしょうか? 条件には合致していないはずですよね? $weeks = "Tue"; switch($weeks){ case"tue": echo"火曜日"; case"wed": echo"水曜日"; この後同じ物を全て表示しますよね? 火曜日水曜日木曜日金曜日土曜日 実際はcaseに該当していないじゃないですか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
「名前:」っていう書式は、思い返してみれば、「ラベル」。 そしてswitch文というのは実は、「該当するラベル内『のみ』を実行する」という命令ではない。 よく if ~ elseif ~ elseif ~ else; の代わりに使えると説明されるが、動作に違いがある。 switchというのは、gotoのように、「該当するラベルに飛び、それ以下を実行する」という命令なのではないか。 なので、break; があることにより、{ } でくくられているswitchブロックを抜けることができる。 逆に break; が無いと、ブロックの残りの部分を実行してしまうのも仕様。 …私はそんな風に考えました。
その他の回答 (2)
- dell_OK
- ベストアンサー率13% (766/5721)
このコードを実行した結果が表示されると思います。
お礼
ありがとうございます
- dell_OK
- ベストアンサー率13% (766/5721)
ドキュメントに「PHPはswitchブロックの終わりまたは最初の break文まで実行を続けます。 CASE文の終わりにbreak文を書かない場合は、PHPは 次のCASE文を実行しつづけます。」と書かれているので言語の仕様だと思われます。 例えば、このように複数の値のいずれかと一致するかを判定する場合は連続してcaseを記述できます。 $weeks = 'Mon'; switch ($weeks) { case 'Mon': case 'Tue': case 'Wed': case 'Thu': case 'Fri': echo '平日'; break; case 'Sun': case 'Sat': echo '休日'; break; } caseごとにbreakが必要ではなくするための記述法だと思います。
お礼
ありがとうございます お示し頂いたコードでは実際に何の結果が表示されるんでしょうか?
お礼
ありがとうございます