Tips

2012.12.04

PHP switch文 【初級編 第30回】

PHP switch文 【初級編 第30回】

switch文

前回は if文について記載しました。
今回は switch文について記載したいと思います。

switch文の概要

switch文も if文と同じようにある条件の結果に応じて、ある処理をさせるといったことが可能になります。
具体的には if文の elseifを複数使用した場合と同じような動作になります。

例えば $hensuu の値が 10 だったらこの処理、 20だったらこの処理を行うといったように、
値に応じてどの処理をさせるかという文を簡潔に記述することができます。

switch文の記述のしかた

switch文は以下のように記述します。

switch(条件){
   case 条件の結果の値1:
   処理;
   break;
   case 条件の結果の値2:
   処理;
   break;
   default:
   上記に当てはまらなかった場合に実行させたい処理;
}

このように条件の結果が case の後ろの値と一致した場合に、以降の行の処理を行うといった動作になります。
そして break; もしくは } に達するまで以降の行の処理を実行し続けます。

サンプル

下記では、$hensuu の値と case の値が一致したらその下の行の処理を実行しています。
そして break; で switch文を抜けています。

<?php
 $hensuu = 10;
 switch($hensuu){
   case 2:
   echo "値は 2 です。";
   break;
   case 10:
   echo "値は 10 です。";
   break;
   case 25:
   echo "値は 25 です。";
   break;
 }
?>

表示結果は以下のようになります。
ブラウザ確認画像

breakが無い場合

ただし switch文は上から値がマッチするかを確認していて、マッチしたらそれ以降の case の値が一致しなくてもその下の処理を実行してしまいます。
そのため予期せぬ動作をさせたくない場合は break; を忘れないようにしなくてはなりません。
以下は break; 文を除いた場合の動作になります。

<?php
 $hensuu = 10;
 switch($hensuu){
   case 2:
   echo "値は 2 です。";
   case 10:
   echo "値は 10 です。";
   case 25:
   echo "値は 25 です。";
 }
?>

このように break; 文を抜くと、case 10, case 25 の処理の内容を実行してしまいます。
ブラウザ確認画像

どの caseにも一致しなかった場合の処理

またどの case の値にも一致しなかった場合の処理を記述したい場合には以下のように default を使用します。
ちなみに上記の case にマッチして、break 文を記述しないと、default の部分も同じように実行されてしまうので注意が必要です。

<?php
 $hensuu = 100;
 switch($hensuu){
   case 2:
   echo "値は 2 です。";
   break;
   case 10:
   echo "値は 10 です。";
   break;
   case 25:
   echo "値は 25 です。";
   break;
   default:
   echo "値は $hensuu です。";
 }
?>

結果は以下のように default: の部分だけの処理が実行されました。
ブラウザ確認画像

複数の case に対する処理をまとめて記述したい場合

上記では1つの case に対して、1つの処理を記述してきましたが、
複数の case をまとめて記述して、1つの処理をさせることもできます。

以下のようにすれば、値が case 2, case 10, case 25 のどれかにマッチすればその下の処理が実行されることになります。

<?php
 $hensuu = 10;
 switch($hensuu){
   case 2:
   case 10:
   case 25:
   echo "値は 2 もしくは 10 もしくは 25 です。";
   break;
   default:
   echo "値は $hensuu です。";
 }
?>

ブラウザ確認画像

switch文を使用する際の注意点

switch(条件) の条件の部分に変数などを与えた場合 switch文では型の比較までを行いません。
そのため与えた引数が数値の型だった場合(例えば数値の 1)で、case 側の値が文字列だった場合(例えば “1”)でも
同じ値のように扱われて、その case 以下の処理が実行されることになります。

以下では数値の値を条件に入れていますが、case の文字列の値と一致したとみなされ、処理が実行されています。

<?php
 $hensuu = 1;
 switch($hensuu){
  case '1';
  echo "値は $hensuu です。";
 }
?>

ブラウザ確認画像

もし数字の数値型と文字列型を判別して switch文を実行したい場合は、以下のようにして 各case文で値と型の両方を比較してやる必要があります。

<?php
 $hensuu = 1;
 switch(true){
  case $hensuu === '1';
  echo "値は文字列の '$hensuu' です。";
  break;
  case $hensuu === 1;
  echo "値は数値の $hensuu です。";
  break;
  }
?>

すると以下のように数値部分だけの処理が行われます。
ブラウザ確認画像

今回はここまでにします。

新連載はじまりました!新PHP基礎 連載リンク

PHP基礎 連載

Recent News

Recent Tips

Tag Search