リターンを使用する場合、ブレークインスイッチは必要ですか?


110

「return」を使用する場合、「switch」機能で「break」を使用する必要があるのか​​と思っていました。

function test($string)
{
  switch($string)
  {
    case 'test1':
      return 'Test 1: ' . $string;
    case 'test2':
      return 'Test 2: ' . $string;
  }
}

私はそれを試しました、そして、それは「壊れる」ことなくうまく動きます。しかし、これが安全かどうかを知る必要があります。ありがとうございました。


1
$ string = 'testx'の場合はどうなりますか。
ジャガディサン

回答:


132

はい、return代わりに使用できますbreak...

breakオプションであり、他のすべてのステートメントによる「落下」を防ぐために使用されcaseます。したがって、関数の実行returnreturn終了するのと同じように使用できます。

また、すべてのcaseステートメントが次のような場合:

case 'foo':
   $result = find_result(...);
   break;

そして、switchあなたが持っているステートメントの後に、それぞれreturn $resultで使用すると、コードがはるかに読みやすくなります。return find_result(...);case

最後に、defaultケースを追加することを忘れないでください。あなたのコードがdefaultケースに決して到達しないと思うなら、あなたはassert確信が持てないので、あなたは関数を使うことができます。


ルジンさん、ありがとうございます。
EMC

16

ブレークは必要ありません。リターンで関数の実行が停止します。

(参考:http : //php.net/manual/en/function.return.php言う:

関数内から呼び出された場合、return()ステートメントは現在の関数の実行を直ちに終了します


4

キーワードreturnが呼び出されると、switch / caseが呼び出された特定の関数が終了したことを示すため、その必要はありません。


3

いいえ、あなたは必要としないbreakswitch case声明。これbreakは実際にはオプションですが、注意して使用してください。


2

必要ありませんが、どのような場合でも使用することを強くお勧めします。


6
意味はありません。リターンは実行時に自分自身で明らかに存在するためです=)コードが少ないほど優れています。
EMC

7
より少ないコード!=より良い。コードゴルフをプレイしてください。読みやすさと理解しやすさを犠牲にして1行にできるように、最適化されたコードよりも、可読性の高い明示的なコードが必要です。
Martin Bean

3
これは両方の方法で議論できます。一部のコンパイラは、スイッチで復帰した後に実行可能でないコードについて警告しますが、そうでないコンパイラもあります。それは個人的な好みであり、少なくとも私にとっては、スイッチを介して落下して何回噛まれたかによって色分けされ、私は休憩を見たいと思っています。
ハリー

2

Breakは、スイッチ構造の制御が別のケースに入るのを制限するために使用される単なる警告文です...たとえば、3つのcaseステートメントがあり、値が最初のケースで、break構造のないケースを使用していて、以下のすべてのケースがある場合最初の場合にのみ条件が満たされているにもかかわらず実行されます... returnはasme関数を実行できるため、returnがswitch caseステートメントから制御を奪うため、breakの代わりにreturnを使用しても問題ありません。それがその瞬間の必要です......それが役に立てば幸いです...


1

リターンはどことして、呼び出したメソッドに制御背中を与えるブレークスイッチブロックの後の最初の命令にジャンプします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.