いつもお世話になります。 今回は、switch文において質問します。
XOOPSの中のスクリプトからですが、
■ A code: ---------------
switch($esc_type){
case 'html':
return htmlspecialchars($string, ENT_QUOTES, $char_set);
case 'htmlall':
return htmlentities($string, ENT_QUOTES, $char_set);
-----(中略)------
default:
return $string;
}
■ B code: ---------------
switch($level){
case '1':
return '\part{';
break;
-----(中略)------
case '6':
return '\subparagraph{';
break;
}
というのがありますが、
質問(1)
switch文には故意にbreakを書かないのちょっと別として、
return は、breakを、省略できるのか、それともこれらは、等価なのか、
それとも、やはり、returnでもbreakを書くのがいいのか、教えてください。
質問(2)
また、通常では、defaultでも、break が必要だとおもいますが、
省略?されているのも結構ありますが、breakがあるのが正解ですか?
それとも、defaultでbreakはもともと必要ないのですか?
これも教えてください。
どうか、よろしくお願いします。
No.4ベストアンサー
- 回答日時:
#3の回答へのレスについて・・・
見解の相違でしょうね。
そのドキュメントの作者がそういう「律儀な人」だからとしか。
実質公式サイトの解説でもついてない例文が多いですが、
ついているものもあるのでなんともいえません。
http://jp2.php.net/manual/ja/control-structures. …
前回の回答にも書きましたが
「defaultは往々にしてフローの最後」というだけで
べつにどこにきてもいいわけで、そうなると
defaultにもbreakは必要です。
そういうのを説明するのが面倒な場合は、
「とりあえずつけときなさい」って解説になるんじゃ
ないでしょうかね。
情報どうもありがとうございます。
確かに、Xoopsでも、defaultが最初に記載されているものもありました。
でも、return を除くSwitch文ではdefaultが最後にあり且つbreakが
ありました。おっしゃるように、疑わしきは害がないので、
default
break; 型にしておいた方が無難ですね。
No.5
- 回答日時:
#4>「defaultは往々にしてフローの最後」というだけで
#4>べつにどこにきてもいいわけで、
実際に試してみたところでは、どこでもいいみたいですけど
http://jp2.php.net/manual/ja/control-structures. …
によると
”最後の case 文に置 く必要があります”
とありますね。
(C言語では、規格的にどこでもいいことになっていますが)
どうも色々とありがとうございます。
このサイトは必須サイトですから、利用しています。
私も、ここで、defaultでbreakは要らないと思ってました。
しかしながら、Xoopsのように大勢の方が関与しているコードで、
各自癖はあるものの、ほぼ, defaultにbreakを記載しているので、
先ほども記載しましたが、害がないなら一応記載する考えに
なってきました。
でも、さまざまな型があるっていうのは、素人からすれば
醜いですね。そのプログラマーさんは、たぶん人とは違う独自の
型を狙っているのかもしれませんが、一番わかりにくいのは、
if($xxx -- 0) xxxxx;
elseif yyyy;
else zzz;
のように、{}を省略しているコードです。
どこで切れているのかすらわからない記載文もあり、
素人がクラックするにはかなり辛いものがあります。
もうちょっと、統一してほしいと思うこの頃です。
No.3
- 回答日時:
switchは下に流れていくだけの構造なのでbreakは
必須じゃないですよ。
ちょっと簡単に書くと(phpの書き方じゃないですが
概念的にご理解ください)
case 1
echo x
case 2
echo y
case 3
echo z
なら1の場合は、xyzと表示されてます。
場合によってはこういうこともありますよね。
breakが必須じゃないってことはわかりますか?
returnが強制的にフローをとめているのであれば
breakはあるだけ無駄です。
ちなみにdefaultは往々にしてフローの最後にくるので
breakはいらないでしょ。さすがに。
回答ありがとうございます。
なるほど、故意にbreakを入れないってのもありなんですね。
そうなると、ますます
return xxx;
break;
っていうのは変ですね。
ただXOOPSの殆どのSwitch文で
default
break; があるので、Switch文は, forなどのように
無限ループが存在するのかと、悩んでしまいました。
でも、次のサイトでは、
http://www.futaba-ide.net/help/040602-switch.html
太字で、「default文の終わりにもbreak文が必要です。」と
なってますね。あれーー;)
No.2
- 回答日時:
waterclockさん、こんにちは。
どういった場合にreturnを使ったのでしょうか。
関数内でしょうか。インクルードなどをしたファイル内でしょうか。
returnとbreakは別のものです。
breakは制御構文(forやswitchなど)で処理を抜け出すためによく使われます。
[ http://www.php.net/manual/ja/control-structures. … ]
returnは関数で戻り値を返す場合やinclude/requireしたときの戻り値を返す場合によく使われます。
[ http://www.php.net/manual/ja/function.return.php ]
switch構文は該当した部分から以降の処理を通ります。
ですので、breakしない場合どこかで該当するものがあれば
そこから一番最後までが常に実行されます。
該当した処理だけを通すために、breakで制御構文を抜け出しています。
最後のdefaultはcaseで該当データがなければ通る処理になります。
default以降には条件判断がないと思いますのでbreakは書かなくても正常に動作します。
書くほうと書かないほうのどちらが文法的に正しいのかは分かりませんが、
私はdefaultでbreakが書かれているものを見たことがありません^^;
papillon68さん、回答ありがとうございます。
たぶん 全部関数内です。
function ..........()
{
switch(....){
........
}
}
>default以降には条件判断がないと思いますのでbreakは書かなくても正常に動作します。
実は、私もそう思っていたのですが、XOOPSではSwitch文は200ほどあり、
なぜか、殆ど defaultでbreakが書かれています。
だから、素人の身としてはここでもパニックになりました。
No.1
- 回答日時:
> return は、breakを、省略できるのか、それともこれらは、等価なのか、
return文が実行された時点でその関数から抜けるので、
return文直後のbreak文が実行されることはありません。
そのため有ってもなくても同じと言うことになります。
> また、通常では、defaultでも、break が必要だとおもいますが、
> 省略?されているのも結構ありますが、breakがあるのが正解ですか?
> それとも、defaultでbreakはもともと必要ないのですか?
switch内の実行が終わるのは、
break文またはswitchブロックの終わりです。
defaultは必ず最後にかかれますから、
breakが無くてもswitchブロックの終わりで実行が終了します。
早速どうもありがとうございます。
同一人物がスクリプトを書いているのであれば、その人のくせで、
全コード同じように記載されてるんですが、XOOPSのような
複数の人が手がけてるものは、まぁ本当に色々とくせがあり、
同じswitch文内でも、returnの後にbreakがあったり、なかったりして、なんか特別な意味でもあるのかと思ってしまいます。
難しいですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
php実行中に実行中のphpファイ...
-
spl_autoload_registerについて
-
論理ANDとビットAND
-
phpスクリプトのみで定期実行
-
【PHP】命令は記述順に処理...
-
シェルスクリプトをPHPで動かそ...
-
PHPパーミッションについて
-
phpからエクセルのマクロを実行...
-
PHPで、C#のプログラムを実行す...
-
header(Location: next.php) だ...
-
PHPのif文でその処理を途中で抜...
-
フォントの色を変えるには?
-
onedrive にexcelファイルをア...
-
PHPMailerのサンプルコードのエ...
-
FTPコマンドでディレクトリごと...
-
URLが.PHPってどういう...
-
リンク先を隠す方法はないでし...
-
VBSの「MsgBox」について
-
*.php、*.php3、*.phtmlの違い
-
CFileDialogの最初のディレクト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpからエクセルのマクロを実行...
-
php実行中に実行中のphpファイ...
-
mysql複数レコードをまとめて削...
-
初めて投稿させていただきます。
-
別サーバのプログラムを起動
-
【PHP】命令は記述順に処理...
-
Switch文における、returnとbre...
-
copy() で属性保存
-
シェルスクリプトをPHPで動かそ...
-
ヒアドキュメントの中で演算子...
-
htmlでsubmitで指定したAction...
-
PHPからバッチファイルの実行
-
Prompt入力値をphp変数として取...
-
httpdのプロセスが自動で消えな...
-
PHPで外部プログラムのバックグ...
-
MySQLでのdeadlockをPHPで検出...
-
コマンドライン実行でDBにアク...
-
require_onceが動いていない
-
PHPでサーバーにインストールさ...
-
spl_autoload_registerについて
おすすめ情報