PHP SCHOOL.biz

PHPの学習をする為のブログです。プログラム未経験の方にも理解できるよう基本的な、PHPの知識について身に付けることができるようにわかりやすい内容にしていきたいと思っています。


PHPでのswitch文

PHPでswitch文を使う際には、異なる条件で異なる処理を行う際に使用します。

PHPでのswitch文

swtch文は、多くの条件で異なる処理を行いたい場合に向いています。
switch文の文法を見てみましょう。

文法


switch (n) {
  case label1:
   if n=label1の場合に実行される処理;
   break;
  case label2:
   if n=label2の場合に実行される処理;
   break;
  case label3:
   if n=label3の場合に実行される処理;
   break;
  ...
  default:
   全ての条件が満たされなかった時に実行される処理;
   break;
}

上の文法の処理は、どのように動くのでしょうか。まず、n(ほとんどの場合は変数)と表現した値を評価します。
nと表現した値は、上から順に比較されます。もしcaseの値と一致した場合その処理が実行されます。
switch文ではbreak文を使用しますが、使用する事により次以降のcaseの値とnを比較する事なく処理を抜けます。
default文は全ての条件に一致しない場合に実行されます。
下の例では、一番上のcaseの"red"という文字列と変数$favcolorの値が一致し、"Your favorite color is red!"がechoされた後、
break文でswtich文を抜け処理を終えます。 

<?php

$favcolor = "red";

switch ($favcolor) {
    case "bleu":
        echo "Your favorite color is red!";
        break;
    case "red":
        echo "Your favorite color is blue!";
        break;
    case "green":
        echo "Your favorite color is green!";
        break;
    default:
        echo "Your favorite color is neither red, blue, nor green!";
        break;
}
?>

処理結果

switch文にbreakをつけないとどうなるのか?

switch文にbreakをつけないとどのようになるのでしょうか。昔、一度なにかをいじっていた時にbreakが付いていなくてちょっと
悩んだことがありました。実際にbreak文を覗いて上の処理を流してみましょう。

実行するプログラムは、下記となります。

<?php

$favcolor = "red";

switch ($favcolor) {
    case "bleu":
        echo "Your favorite color is bleu!";
    case "red":
        echo "Your favorite color is red!";
    case "green":
        echo "Your favorite color is green!";
    default:
        echo "Your favorite color is neither red, blue, nor green!";
}
?>

処理結果

2番目のcase文の処理でtrueで処理された後、その後のcase文もtrueとして処理され、
"Your favorite color is red!Your favorite color is green!Your favorite color is neither red, nor green!"

と出力されました。
switch文でbreak文をつけないと一度Trueと判断した後のcase文は全てtrueと処理するようです。
break文をつけないと思いがけない結果を招きます。breakをつける癖をつけるようにしましょう。