logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll

PHP レッスン — レッスン 8-2 — switch 演算子

08/12/2019, by Ivan

前のレッスンでは、if 演算子に触れました。if 演算子は、条件が真かどうかを確認し、その確認結果に応じて必要な動作を実行できるようにします。


では、10 回の確認を行い、その確認結果に応じて 10 の動作のうちの 1 つを実行する必要があると想像してみましょう。もちろん、これも if で書けます:

<?php
  if($x == 1){
    // 動作
  }
  if($x == 2){
    // 動作
  }
  if($x == 3){
    // 動作
  }
  if($x == 4){
    // 動作
  }
  if($x == 5){
    // 動作
  }
  if($x == 6){
    // 動作
  }
  if($x == 7){
    // 動作
  }
  if($x == 8){
     // 動作
  }
  if($x == 9){
    // 動作
  }
  if($x == 10){
    // 動作
  }
?>

この方法でも動作しますが、このような確認は SWITCH 演算子で書くほうがよいです。
PHP switch
switch 演算子は、多くの条件のもとで式の値を確認できるようにします。上で示した例を switch を使って作り直しましょう:

<?php
  switch ($x){
    case 1:
      // 動作
    break;
    case 2:
      // 動作
    break;
    case 3:
      // 動作
    break;
    case 4:
      // 動作
    break;
    case 5:
      // 動作
    break;
    case 6:
      // 動作
    break;
    case 7:
      // 動作
    break;
    case 8:
      // 動作
    break;
    case 9:
      // 動作
    break;
    case 10:
      // 動作
    break;
    default:
      // 他の条件が合わなかった場合の動作
  }
?>

先に言ったとおり、両方の例は同じように動作します。ただ switch の場合、$x の値が 1 から 10 に等しくならないときに働く default を追加しました。
switch の構文が何で構成されているか見てみましょう。まず switch 演算子自体が来て、その後の括弧の中に確認される式が来ます。確認される式には、テキスト形式でも数値形式でも変数を入れられます。つまり数値でも文字列でもよく、例えば:

<?php
  switch ($x){
    case 'Hello':

    break;
    case 'Bye':

    break;
  }
?>

確認される式の記述の後に波括弧が来ます。波括弧の中に、式の取り得る値と動作を書きます。

<?php
  switch ($x){
    case 'Hello': // 取り得る値
      print $x;   // 動作
    break; // switch の実行の終わり
    case 2:
      $x++;
    break;
  }
?>

値の確認は case の形で書き、取り得る値自体は、文字列なら引用符で、数値なら引用符なしで書きます。取り得る値の後にコロンを置きます。
次に、条件が真のときに実行する必要な動作を書きます。case と動作の終わりの後に break; を置く必要があります。これは switch の動作の終わりを意味します。
すべての case の後に default を使えます。他の case が働かなかった場合、または break; を置き忘れて switch の実行が続いた場合に働きます。ここから 2 つの結論が導けます:
1. 動作の終わりの後に break; を置き忘れないこと。
2. break; 演算子は default の動作の後には置かなくてもよい。いずれにせよ、それは条件確認の最後の演算子だからです。

以下は switch 演算子のフローチャートです:

Switch блок схема

説明として言うと、ここでは数 D を割った余りと、週の初めから何日経ったかを得て、それが今日の曜日になります。

<?php
// $D は月曜からの日数
$x = $D % 7;
switch ($x){
  case 1:
    print '月曜日';
  break;
  case 2:
    print '火曜日';
  break;
  case 3:
    print '水曜日';
  break;
  case 4:
    print '木曜日';
  break;
  case 5:
    print '金曜日';
  break;
  case 6:
    print '土曜日';
  break;
  case 7:
    print '日曜日';
  break;
}
?>