Parallels Desktop ブラックフライデーセール 25%OFFGo!

【PHP入門】switch文の使い方 条件分岐

PHPでswitch文を使う方法

PHPで条件によって処理を分岐する構文、switch文の基本的な使い方、応用的な使い方、またif文との違いについて解説します。

目次

switch文の使い方(基本編)

switch文の書き方は次のとおりです。

switch文の使い方 基本編
  • 丸括弧()の中に「式A」、case句の後ろに「式B」を記述し、式Aと式Bが等しいかどうかを判定します。
  • 式Aと式Bが等しくなければ、そのcaseブロックの処理はスキップされます。
  • 式Aと式Bが等しれば、そのcaseブロック以降の処理が実行されます。
  • switch文の終わりまたはbreakが出現したところで処理は終了します。
  • 式Aがどのcaseとも等しくなければ、defaultブロックの処理が実行されます。defaultは省略可能です。

「式A」「式B」と言っていますが、最もシンプルなswitch文では、式Aに変数、式Bに数値または文字列が入ります。変数の値が何なのかによって条件分岐をして処理をするという使い方です。

具体的に書いてみます。

$value = 2;

switch ($value) {
  case 1:
    echo 'valueは1です';
    break;
  case 2:
    echo 'valueは2です';
    break;
  case 3:
    echo 'valueは3です';
    break;
  default:
    echo 'valueは1でも2でも3でもありません';
    break;
}
実行結果

valueは2です

最初のcase 1:は、変数$valueの値と等しくないので実行されません。

2つ目のcase 2:$valueの値と等しいので実行されます。そして、breakが記述されているのでswitch文を終了し、以下の処理は実行されません。

このbreakがとても重要です。基本的にはこのbreakをそれぞれのcaseブロックの最後に記述します。なんか面倒くさいですね。でもそういうものだと思ってください。イヤならif文を使え。

breakがないとどうなるか

breakをうっかり書き忘れるとこうなります。

$value = 2;

switch ($value) {
  case 1:
    echo 'valueは1です';
  case 2:
    echo 'valueは2です';
  case 3:
    echo 'valueは3です';
  default:
    echo 'valueは1でも2でも3でもありません';
}
実行結果

valueは2ですvalueは3ですvalueは1でも2でも3でもありません

どういうことかというと、switch文はスイッチをオンにすることはできても、オフにすることはできないんです。なんという馬鹿スイッチ。

最初はスイッチがオフの状態です。そしてcase 2:でスイッチがオンになったら、それ以降はずっとオンのままです。case 3:でオフになることはありません。なので、処理を終了したい場所にbreakを記述する必要があります。

switch文の使い方 breakがない場合
PR

無料で利用できるプログラミング学習サービスをお探しならば Code Lesson はいかがでしょうか。プロのエンジニアが監修した学習ロードマップで効率的に学習、AIに質問、最後にクイズで理解度をチェックできます。

switch文の使い方(応用編)

複数条件の指定

複数のcaseを連続して使うと、複数の条件をORでつないだのと同じことになります。

$value = 2;

switch ($value) {
  case 1:
  case 2:
  case 3:
    echo 'valueは1または2または3です';
    break;
  case 4:
    echo 'valueは4です';
    break;
}
実行結果

valueは1または2または3です

これは、スイッチが一度オンになったら二度とオフにはならない性質を利用したものです。case 2:でスイッチがオンになります。その次のcase 3:では値が一致しませんがスイッチはオフになりません。したがって、その下の処理が実行され、breakが現れたところで処理が終了します。

switch文の使い方 複数条件の指定

比較演算子や論理演算子を使う

switch文では、比較演算子(==, <, >など)や論理演算子(and, orなど)を使うこともできます。

$age = 63;

switch (true) {
  case $age < 20:
    echo '青二才';
    break;
  case $age >= 20 && $age < 65:
    echo 'ヤングマン';
    break;
  case $age >= 65:
    echo '高齢者';
    break;
}
実行結果

ヤングマン

まず、丸括弧()trueを入れます。←これすごく大事です。以降、caseの条件式がtrueならばスイッチがオンになり、処理が実行されます。

switch ($age)のように丸括弧の中に変数を記述せよという解説がこのインターネットには溢れているのですが、これは間違いです。

間違った例を試してみましょう。

$age = 0;

switch ($age) {
  case $age < 20:
    echo '青二才';
    break;
  case $age >= 20 && $age < 65:
    echo 'ヤングマン';
    break;
  case $age >= 65:
    echo '高齢者';
    break;
}
実行結果

ヤングマン

「青二才」と出力されることが期待されるのですが「ヤングマン」と出力されます。なぜでしょうか。

switch文では丸括弧内の式とcaseで指定した条件式が等しいときにスイッチがオンになります。

  • $age = 0の場合、丸括弧内には0が入っていることになります。
  • 1つ目のcasetrueなので丸括弧内の式0と等しくありません。
  • 2つ目のcasefalseなので丸括弧内の式0と等しいです。
  • したがって「ヤングマン」と出力されてしまいます。

気を付けましょう。

厳密な比較

もうお気付きかもしれませんが、switch文の比較は緩やかな比較です。厳密な比較ではありません。

緩やかな比較とは厳密な比較とは
比較演算子==で表される
型の違いを考慮せずに比較する
1 == '1'true
1 == truetrue
0 == nulltrue
比較演算子===で表される
型を含めて比較する
1 === '1'false
1 === truefalse
0 === nullfalse

switch文で厳密な比較をしたいときはどうしましょう。switch (true)を使います。

$value = null;

switch (true) {
  case $value === 0:
    echo 'valueは数値の0です';
    break;
  case $value === '0':
    echo 'valueは文字列の0です';
    break;
  case $value === '':
    echo 'valueは空です';
    break;
  case $value === null:
    echo 'valueはnullです';
    break;
}
実行結果

valueはnullです

if文とswitch文の違い

if文とswitch文、どちらも条件分岐をするための構文です。どちらを使っても同じことができます。では、どちらを使えばいいのでしょうか。使い分けのルールがあるのでしょうか。

巷では

  • 条件が少ないときはif文、多いときはswitch文を使え
  • 条件が複雑なときはif文、シンプルなときはswitch文を使え

みたいなことが言われています。が、私はぜんぜん違う考えで、文系の人はif文、理系の人はswitch文を使えばいいと思っています。

if文は「もし〇〇ならば、△△する。そうでなければ、××する。」のような文章をそのままコードにしたような構文です。一方、switch文はスイッチングによって処理を切り替える構文です。

あなたはどちらを使いますか。

でわでわ

PR

無料で利用できるプログラミング学習サービスをお探しならば Code Lesson はいかがでしょうか。プロのエンジニアが監修した学習ロードマップで効率的に学習、AIに質問、最後にクイズで理解度をチェックできます。

PHPでswitch文を使う方法

この記事が気に入ったら
いいね または フォローしてね!

シェアしてね

コメント

コメントする

目次