• ベストアンサー

phpのこの画像のプログラムについて教えてください

phpのこの画像のプログラムについて教えてください このプログラムでなぜgoodperfectが出力されるんですか? case10:の前にbreakがないから次の処理がそのまま実行されたというのは わかるんですが case10に条件が該当していないのに perfectも出力されるのはなぜでしょうか?

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5096/13320)
回答No.2

まず大前提として、プログラムは上の行から下の行へ順次実行されていくと言う事を理解してください。 switchは条件として与えられた値(この場合$num1)をcaseで指定されている値と比較し、一致した行へジャンプします。 $num1の値が 5 なので、case 5: の行へ処理がジャンプします。 case 5: の行はジャンプ位置を示すラベルなので特段の処理は無く次行へ処理が進みます。 そして echo "good"; が処理され次の行の case 10: へ移動します。 case の場所では条件判定は行われません。条件判定は switch の場所でのみ行われ case は単にジャンプ位置を示すラベルでしかないので、PHPとしては何も処理せず次行へ処理が進みます。 次行で echo "perfect"; が実行され次の行の brake; へ移動します。 brake は現在実行されている制御構造から抜けるという命令なので、処理は switch の閉じ括弧の次の処理へとジャンプします。 閉じ括弧以降は処理が無いのでプログラムの実行が終了します。 という流れで処理されるので goodperfect と表示されます。

okwaveokw
質問者

お礼

だとすると case5と10を入れ替えたらgoodだけしか表示されないということですよね?

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • t_ohta
  • ベストアンサー率38% (5096/13320)
回答No.5

> だとすると > case5と10を入れ替えたらgoodだけしか表示されないということですよね? switch ($num1) {  case 10:   echo "perfect";   brake;  case 5:   echo "good";  default:   echo "bad";   brake; } と書いたなら、結果は goodbad と出力されるでしょうね。 default も case と一緒で単にジャンプする場所を指定しているラベルに過ぎないので brake で制御構造から抜けなければ次の行が実行されてしまいます。

okwaveokw
質問者

お礼

> だとすると > case5と10を入れ替えたらgoodだけしか表示されないということですよね? この画像についてです

全文を見る
すると、全ての回答が全文表示されます。
  • asciiz
  • ベストアンサー率70% (6654/9431)
回答No.4

switch 文において、case XXX: と言う行は、「ラベル」なのです。 なので、 switch ($num1) において、$num1=5 の時、 「case 5: と言うまとまりを実行する」 のではありません。 「case 5: の位置にジャンプする」 だけなのです。 そうすると、「case 5:」の位置に制御が移ったあと、 case 5: ←位置を示すだけのラベルであるので何の動作もしない echo "good"; ←"good"を出力する case 10: ←位置を示すだけのラベルであるので何の動作もしない echo "perfect"; ←"perfect"を出力する break; ← switchブロックを抜ける ここまで実行されてしまいます。 従って、出力は「goodperfect」になります。 もし $num1=10 であれば、初めから 「case 10:」の所に飛び、"perfect"のみが出力されます。 このサンプルプログラムは、そのような想定外の動作をしてしまわないよう、必ず各case項目ごとに break; を忘れないようにしましょう、と言う物であるわけです。 ---- まあ、プログラマが本当にその仕様(ラベル『以降』を実行する)を生かして使うパターンが無くもありません。 例えば、 switch($num) { case 5: case 8: case 10: echo "good"; break; default: echo "bad"; } こう書いたとき、$numが 5 または 8 または 10 の時に "good" が出力されます。それ以外の値では "bad" が出力されます。 こちらは理解できますでしょうか。 一般的な switch~case の使い方だと、case XXX: と次の case YYY:の間が実行するブロックであるように見えますが、そうでは無い、と言うことを言いたかったのでしょうね。

okwaveokw
質問者

お礼

ありがとうございます > だとすると > case5と10を入れ替えたらgoodだけしか表示されないということですよね? この画像についてです

全文を見る
すると、全ての回答が全文表示されます。
  • anyhelp
  • ベストアンサー率43% (79/180)
回答No.3

プログラムは上から順に処理されるのです。何の数値が変数に入ってるかを評価するのはSwitchを通過するタイミングだけなんです。 ですから、5の場合は、case 5:に飛び、それ以降の行を全て実行するという解釈が正解です。だから、あえてbreakを書いてここでswitch文から抜けるというコード記述が通例なわけなんです。 あなたの疑問はわかります。変数が5なんだから、case 5:から実行されて終わりでしょと。case 10:以降の部分は実行されないはずだと思ってますね? 例えば、Case10: のbreak;も消してどうなるか見てみてください。

okwaveokw
質問者

お礼

ありがとうございます

全文を見る
すると、全ての回答が全文表示されます。
  • anyhelp
  • ベストアンサー率43% (79/180)
回答No.1

Break;が一箇所抜けてませんか?

okwaveokw
質問者

お礼

このプログラムでなぜgoodperfectが出力されるんですか? case10:の前にbreakがないから次の処理がそのまま実行されたというのは わかるんですが

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • phpのこの画像の解釈についてあっていますか?

    phpのこの画像の解釈についてあっていますか? もしも、echo $str;が波括弧?の内側にある場合 if文の条件がfalseのためそれ以降のプログラムが実行されず停止 何も出力されず終わる 今回の場合、echo $str;が波括弧?の外側にあるため if文がfalseのため中括弧の終わり } までの処理は実行されず 単独でecho $str;を実行しようとしたため 変数strが定義されていないのでエラーが出力された

    • ベストアンサー
    • PHP
  • PHPから別のHTML(PHP)へリンクさせたい

    次のような処理を考えています。 FormでSubmitされた内容をA.PHPで処理を行います。 A.PHPでは処理結果によって次の2つのケースを行う。 ケース1:B.PHPを実行する。 ケース2:X.HTMLを実行する。 (A.PHPはケース1又はケース2を実行後終了する。) _____________________________ A.PHPでのB.PHP又はX.HTMLへ処理を引き継ぐ記述は どのような構文になるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • php次の画像の解釈について $num1 に5を

    php次の画像の解釈について $num1 に5を代入する $num1はすでに5になっていて、 条件の中で5===5の条件式がブール型によって trueだから次の処理のに進む $str に "ok"を代入する その$strに代入された中身をechoによって出力する それでOKが出力された この認識であっていますか?

    • ベストアンサー
    • PHP
  • php次の画像の解釈について $num1 に5を

    php次の画像の解釈について $num1 に5を代入する $num1はすでに5になっていて、 条件の中で5===5の条件式がブール型によって trueだから次の処理のに進む $str に "ok"を代入する その$strに代入された中身をechoによって出力する それでOKが出力された この認識であっていますか?

    • ベストアンサー
    • PHP
  • PHPのプログラムが同時に呼び出された場合について

    PHPで同時に同じプログラムが呼び出された時、 WEBサーバでは、同時にプログラムが実行されるのでしょうか? それとも、先に呼び出された処理が終るのを待ってから、 後の処理が実行されるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpで画像処理

    phpで画像処理 いつもお世話になっております。 phpで画像処理を行いたいのですが どのような方法があるかご存知の方いませんでしょうか。 内容としては ある画像ファイルの予め決めた場所に 文字を出力しブラウザに表示するという仕様です。(phpファイルにアクセスした際)

    • ベストアンサー
    • PHP
  • phpプログラムにてすぐecho出力が出ない。

    phpにて、ログ解析を解析し、解析結果をCSVに加工して出力するものを 作成しました。 ログの解析には、解析したい単語で正規表現を使用し、 抽出しています。 正規表現は一行につき、多い場合で5つ実行されます。 echoでところどころに変数を出力するようにしています。 phpの<?phpのすぐ下にも startと出力するようにechoを入れています。 ログのボリュームにもよるのですが、 サイズが大きいログの場合、 解析プログラムを実行しても、最初のうちは、ふんともすんとも しないのです。 5000行のログでは、1時間たっても、実行されず、echoの標準出力が発行されず、 100行程度の場合、数秒でechoの標準出力が出力されます。 すこし、経つと、思い出したかのように 標準出力を吐き出します。 phpのプログラムにおいて、 実行する場合に、どのようなソースチェックが行われているのでしょうか?? すこし、わかりづらい質問ですが、 詳しい方、宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • Switch構文について

    最初にbreakが登場するまでブロック内の処理を実行するということを理解しました。 特定のcaseでのみbreakさせるような場合に、switch構文を使ってみたいです。 サンプルプログラムを作ってみて、構文の理解を深めているのですが 「特定のcaseでのみbreakさせる」例が思いつきません。 実際どのような場合にこの構文を使いたくなりますでしょうか。 (caseのたびに、必ずbreakさせるのであれば、if構文を使いたくなる) 想定しているイメージは ある条件がととのった場合は下記の処理を実行する。  処理(1)→処理(2)→処理(3)→処理(4) 別の条件がととのった場合は下記の処理を実行する。  処理(2)→処理(3)→処理(4) ※OKWAVEより補足:「Webシステム開発」についての質問です。

  • PHPでexeファイル実行

    C言語でMPG形式の画像ファイルを読み込み、画像処理をしてテキスト形式で画像データを出力するプログラムを作成したのですが、 これをPHPプログラム内で動作させ、テキストデータ(できればバイナリのほうがいい)を読み取りたいと思います。 これはexeファイルをexecやsystem関数で実行することで解決できるのでしょうか? また、C言語の画像処理プログラムが画像を読み込んでからテキストデータを作成するまで1分ほどのタイムラグがあります。 どうすればPHP内の処理でexeファイル実行→exeがデータベースから画像を読み込む→ 1分処理待ち→テキスト作成→作成されたテキストデータをPHPで読み込み とできるのでしょうか? ちなみに、exeファイルとphpで作成した画像データベースはサーバー機に置くつもりです。 テキストデータを介さなくても、C言語プログラムからphpに直接データを渡す方法があればそちらのほうが望ましいです。 連続投稿で申し訳ないのですが、急を要するのでぜひともご解答お願いします。

    • ベストアンサー
    • PHP
  • phpでこの画像について なぜ5 secon

    phpでこの画像について なぜ5 seconds of summerが出力されるんでしょうか? caseとswtchの引数?が一致していないですよね?

    • ベストアンサー
    • PHP