PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのbreakステートメントとは?ループとswitchを抜ける方法を実例で解説


はじめに

breakステートメントは、PHPにおけるループ制御のためのキーワードのひとつです。while、do-while、for、foreachといったループ処理やswitch文の中でプログラムの流れがbreakに到達すると、そのループ(またはswitchブロック)内の残りの処理はすべてスキップされ、ループの直後にある処理へと実行が移ります。

基本構文

while (expr)
{
    ..
    ..
    if (expr1)
    break;
    ..
    ..
}

次の例では、ユーザーが「END」という文字列を入力するまで、whileループが標準入力からの読み込みを続けます。「END」が入力された時点でbreakが実行され、ループが終了します。

サンプルコード

<?php
while (TRUE){
    $var=readline("enter something (END to stop loop)");
    if ($var=="END")
        break;
    echo "You entered $var\n";
}
?>

出力結果

このコードを実行すると、次のような結果が出力されます。

enter something (END to stop loop)Hello
You entered Hello
enter something (END to stop loop)PHP
You entered PHP
enter something (END to stop loop)END

なお、breakには省略可能な数値引数を指定できます。この数値は「いくつの入れ子構造を抜けるか」を表しており、デフォルトは1です。

ネストされたループでのbreakの動作

入れ子(ネスト)になったループの中でbreakを使うと、breakは現在のループ、つまり内側のループだけを抜けます。次の例では、内側のforループの中でbreakを使用しています。

サンプルコード

<?php
for ($i = 1;$i<=5;$i++) {
    echo "Start Of outer loop\n";
    for ($j=1;$j<=5;$j++) {
        if ($j >=3) break ;
        echo "I : $i J : $j"."\n";
    }
    echo "End of inner loop\n";
}
?>

出力結果

このコードを実行すると、次のような結果が出力されます。

Start Of outer loop
I : 1 J : 1
I : 1 J : 2
End of inner loop
Start Of outer loop
I : 2 J : 1
I : 2 J : 2
End of inner loop
Start Of outer loop
I : 3 J : 1
I : 3 J : 2
End of inner loop
Start Of outer loop
I : 4 J : 1
I : 4 J : 2
End of inner loop
Start Of outer loop
I : 5 J : 1
I : 5 J : 2
End of inner loop

$jが3以上になった時点で内側のループがbreakされ、一方で外側のループは最後まで5回繰り返されている点に注目してください。これは、breakが内側のループにしか影響しないことを示す好例です。

break 2で複数の階層を抜ける

breakは数値引数を受け取ることができ、いくつの外側の構造をまとめて抜けるかを指定できます。次の例では、内側のループ内の「break 2」によって、内側のループだけでなく外側のループも同時に終了させています。

サンプルコード

<?php
for ($i = 1;$i<=5;$i++) {
    echo "Start Of outer loop\n";
    for ($j=1;$j<=5;$j++) {
        if ($j >3) break 2 ;
        echo "I : $i J : $j"."\n";
    }
    echo "End of inner loop\n";
}
?>

出力結果

このコードを実行すると、次のような結果が出力されます。

I : 1 J : 1
I : 1 J : 2
I : 1 J : 3

$jが4になった時点で「break 2」が実行され、内側と外側の両方のループが一気に終了するため、それ以降の出力は一切ありません。

switch文でのbreak

switch文においてbreakは、マッチしたcaseの処理を実行した後、それ以降のcaseへ処理が流れ落ちる(フォールスルー)ことを防ぐ役割を果たします。次の例では、入力された番号に応じて25の平方根または平方を計算しています。

サンプルコード

<?php
$x=25;
$var=(int)readline("1を入力すると平方根、2を入力すると平方を計算します: ");
switch($var){
    case 1:echo sqrt($x). "\n";
       break;
    case 2:echo pow($x, $var) . "\n";
}
?>

出力結果

このコードを実行すると、次のような結果が出力されます。

1を入力すると平方根、2を入力すると平方を計算します: 2
625
1を入力すると平方根、2を入力すると平方を計算します: 1
5

case 1ではsqrt()関数によって√25=5が、case 2ではpow()関数によって25の2乗=625が計算されます。各caseの末尾にbreakを置くことで、意図しないcaseへのフォールスルーを確実に防いでいます。

まとめ

breakステートメントは、ループやswitch文の実行を途中で終了させるための重要な制御構造です。ポイントを整理すると以下の通りです。

  • while、do-while、for、foreach、switchのいずれの中でも使用できる
  • デフォルトでは、breakが書かれた最も内側の構造のみを抜ける
  • 「break 2」のように数値引数を指定すると、指定した階層分まとめて抜けられる
  • switch文では、フォールスルーを防ぐために各caseの末尾で使うのが一般的
  1. C#のwhileループでbreakステートメントを使う方法を解説

    C#におけるbreakステートメントは、ループを即座に終了させ、実行をループ直後の次のステートメントへ移すための制御構文です。ループ内でbreakステートメントが実行されると、その時点でループは強制的に中断され、プログラムの制御はループの後に続く処理へと移ります。条件に関係なく途中でループを抜けたい場合に非常に便利です。breakステートメントの基本的な使い方ここでは、whileループの中でbreakステートメントを使う具体的な例を見ていきましょう。以下のコードスニペットでは、特定の条件を満たしたときにbreakによってループを終了させています。if (a > 15) { bre

  2. Pythonのif文内でbreakステートメントは使える?使い方と注意点を解説

    PythonのbreakステートメントとはPythonのbreakキーワードは、ループの流れを制御するための重要なステートメントです。breakが実行されると、その時点で残りの反復処理(イテレーション)はすべて中断され、プログラムの制御はループの直後にある次の文へと移ります。実際のコードでは、breakはほぼ必ず条件分岐であるifブロックの中に記述されます。つまり、「ある条件を満たした場合にのみループを抜ける」という形で使われるのが一般的です。whileループ内でのbreakの基本構文while expr == True:    stmt1 &