• ベストアンサー

phpのswitchについて教えて下さい brea

phpのswitchについて教えて下さい breakがないとなぜその後のechoを全て表示してしまうんでしょうか? 条件には合致していないはずですよね? $weeks = "Tue"; switch($weeks){ case"tue": echo"火曜日"; case"wed": echo"水曜日"; この後同じ物を全て表示しますよね? 火曜日水曜日木曜日金曜日土曜日 実際はcaseに該当していないじゃないですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • asciiz
  • ベストアンサー率70% (6825/9705)
回答No.1

「名前:」っていう書式は、思い返してみれば、「ラベル」。 そしてswitch文というのは実は、「該当するラベル内『のみ』を実行する」という命令ではない。 よく if ~ elseif ~ elseif ~ else; の代わりに使えると説明されるが、動作に違いがある。 switchというのは、gotoのように、「該当するラベルに飛び、それ以下を実行する」という命令なのではないか。 なので、break; があることにより、{ } でくくられているswitchブロックを抜けることができる。 逆に break; が無いと、ブロックの残りの部分を実行してしまうのも仕様。 …私はそんな風に考えました。

g5mokdra
質問者

お礼

ありがとうございます

その他の回答 (2)

  • dell_OK
  • ベストアンサー率13% (770/5733)
回答No.3

このコードを実行した結果が表示されると思います。

g5mokdra
質問者

お礼

ありがとうございます

  • dell_OK
  • ベストアンサー率13% (770/5733)
回答No.2

ドキュメントに「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が必要ではなくするための記述法だと思います。

g5mokdra
質問者

お礼

ありがとうございます お示し頂いたコードでは実際に何の結果が表示されるんでしょうか?

関連するQ&A