
いつもお世話になります。 今回は、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で質問しましょう!
似たような質問が見つかりました
- JavaScript jsで、switch文で書かれた分をif文にできませんか。 1 2022/07/28 15:10
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- その他(プログラミング・Web制作) powershell で書いたプログラムでcd が動かない 5 2023/04/08 14:47
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スクリプトを実行すると警告が...
-
PHPの設置について。属性777とは?
-
Webサーバの入っていない98seで
-
PHPからシェルスクリプトを実行
-
mod_phpで、rootしか実行できな...
-
PHPでCGIをするのは
-
Maximum execution time of 30 ...
-
PHPでexecやpassthruすると
-
あるphpから他のPHPプロ...
-
perl -e "print 'A';"
-
PHPからCRONの編集
-
php/cgi , php(cgi)とは?
-
unix(freebsd)でmysqldumpコマ...
-
PHPからのライブラリ関数コール
-
EclipseでPHPスクリプトを実行...
-
外部コマンドの実行結果の取得
-
PHPは何故エディタで書けるので...
-
cronの設定
-
crontab -lの結果取得
-
phpでアクセス権の設定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
mysql複数レコードをまとめて削...
-
シェルスクリプトをPHPで動かそ...
-
PHPでコマンドプロンプトを実行...
-
require_onceが動いていない
-
ヒアドキュメントの中で演算子...
-
PHPでサーバーにインストールさ...
-
php実行中に実行中のphpファイ...
-
社内LANで複数台のPCからApache...
-
ブラウザからexecコマンドを実...
-
PHPからバッチファイルの実行
-
Switch文における、returnとbre...
-
PHPからPostgreSQLのダンプを実行
-
正常に動作しない
-
htmlでsubmitで指定したAction...
-
PHPファイルをcronで実行す...
-
[cakePHP]外部ファイルの実行方法
-
テルネットしコマンドを自動実行
-
copy() で属性保存
-
PHP+MySQLでrollback出来ない
-
入力してからn時間(日)後、DBデ...
おすすめ情報