【PHP】switch文を使って複数の条件をまとめて処理する方法

エディタPHP

こんにちは。いっとくです!

昔、濡れた手で電気のスイッチを押したらピリッときたことがあります。怖っ!

条件分岐を書く際、if文を使うことが多いと思うのですが、たまに条件が多すぎてめちゃくちゃ読みづらいコードになることありませんか?

そんな時、switch文は見た目をスッキリと書くことができるのでとても便利です。

見た目だけでなく、条件分岐が複雑になった時、if文とは評価方法が若干異なるため、パフォーマンスが上がる場合もあります。

まぁ、その辺の具体的なところはPHPの公式マニュアルを参考にしてみてください

PHP:switch – Manual

スポンサーリンク

switch文で同じ処理をまとめる書き方

で、今回の本題なんですが、switch文の条件によっては全く同じ処理をしたい場合がある時、それぞれのcaseに同じ処理を書くのって面倒じゃないですか?

例えばswitch文で分岐を行う際はこう書きますよね

<?php

$a = 3;

switch ($a) {
    case 1:
        echo 'This is 1';
        break;
    case 2:
        echo 'This is 2';
        break;
    case 3:
        echo 'This is 3'; //こいつが出力される
        break;
    case 4:
        echo 'This is 4';
        break;
}

caseのところはコロンではなくセミコロンでも構いません。

それが、例えば以下のような場合だった時。

<?php

$a = 3;

switch ($a) {
    case 1:
        echo '処理A';
        break;
    case 2:
        echo '処理B';
        break;
    case 3:
        echo '処理A'; // 1の時と同じやん!!
        break;
    case 4:
        echo '処理C';
        break;
}

caseが1の時と3の時で処理が被っているねぇ!

これならいっそのこと処理をまとめたい…!

そんな時はswitch文を以下のように書くことで処理をまとめることができます。

<?php

$a = 3;

switch ($a) {
    case 1:
    case 3:
        echo '処理A'; // 1か3ならこの処理が動く
        break;
    case 2:
        echo '処理B';
        break;
    case 4:
        echo '処理AC';
        break;
}

うん、スッキリ!!

一応なぜこうなるのかも解説します。

実はswitch文というのは、条件判定に合致した後、その下にある処理を全て実行しようとします。

それを防ぐために通常はbreakを挟むことによって中断しています。

なので、breakを書き忘れると以下のような動きをします。

<?php

$a = 3;

switch ($a) {
    case 1:
        echo '処理A';
    case 2:
        echo '処理B';
    case 3: // ここで条件に合致したので処理を開始する
        echo '処理A';
    case 4:
        echo '処理C'; // breakがないので、こっちも動く
}

// 処理A処理Cが出力される

というわけなのでswitch文を書く時はbreakするのを絶対忘れちゃいけないのですが、逆にこの現象を利用し、caseの条件を連続で書くことによって、同じ処理をする条件をまとめることができちゃいます。

便利ですね〜。

実際の業務で使ったことは数回しかありませんが、パーフェクトPHPを読んだ際にこんな使い方があるんだ〜と感心させられました

技術書を読むと、普段の業務上では学ぶことができないことを知ることができるので読む価値あります。

以上、いっとくでした!さいなら!

コメント

タイトルとURLをコピーしました