⊗ppPmCdBNM 100 of 447 menu

PHPにおけるbreakの任意性

コマンド break は任意です。 しかし、これがないと case ブロックの 動作は予期しないものになります。例を見てみましょう。 次のようなコードがあるとします:

<?php $num = 1; switch ($num) { case 1: echo 1; break; case 2: echo 2; break; case 3: echo 3; break; } ?>

このコードからすべての break を取り除き、 変数 $num にはまず数字 3 を 代入してみましょう。

今のところ、すべては以前と同様に動作します:

<?php $num = 3; // ここを数字3とする switch ($num) { case 1: echo 1; case 2: echo 2; case 3: echo 3; } // 実行後、コードは 3 を出力します - 問題ありません ?>

次に、変数 $num に数字 2 を 代入してみます。この場合、予想通り case 2 が実行され、その後、予期せず case 3 も実行されます:

<?php $num = 2; switch ($num) { case 1: echo 1; case 2: echo 2; case 3: echo 3; } // 実行後、コードは 2、そして 3 を出力します ?>

もし変数 $num に数字 1 を 代入すると、すべての case 構文が 実行されてしまいます:

<?php $num = 1; switch ($num) { case 1: echo 1; case 2: echo 2; case 3: echo 3; } // 実行後、コードは 1、次に 2、そして 3 を出力します ?>

つまり、break が存在しない場合、 意図した case が実行された後、 その下にあるすべての case も実行されてしまうのです。この特性が 問題解決に利用されることもあります。

次の例では、変数 $num の値が 1 または 2 の場合、 変数 $res'a' が 代入されます。変数 $num の値が 3 の場合、変数 $res には 'b' が代入されます:

<?php $num = 1; switch ($num) { case 1: case 2: $res = 'a'; break; case 3: $res = 'b'; break; } echo $res; ?>

上記で、この特性が時々使われると書きましたが、 私は、コードが非常に明確ではなくなるため、 基本的にはこの使い方を推奨しません。

このような問題は、if文を使ってより明確に 解決できます:

<?php $num = 1; if ($num == 1 or $num == 2) { $res = 'a'; } if ($num == 3) { $res = 'b'; } echo $res; ?>
日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否