• PHP
【PHP】switch分の書き方、PHP 7.3 から PHP7.4の変更点

基本的な使用方法

PHPのswitch文はある変数に応じて、処理を分岐させるときに使用します。

下記は簡単な例です。

<?php
$variable = 0;
switch ($variable) {
    case '0':
        echo(0);
        break;
        
    case '1':
        echo(1);
        break;
        
    default:
        break;
}

// 実行すると0が出力
  • 「break」は条件に一致したら switch文 を抜ける役割です
  • 「default」はどの case にも当てはまらない場合の処理を書きます

continueについて

continueはループ処理で使用する命令で下記の様な挙動です

continue 階層数;
<?php
echo "continue \n";
for($i = 0; $i < 5; $i++) {
    echo $i. "\n";
    for($j = 0; $j < 4; $j++) {
        if($j === 2) continue;
        echo " ". $j. "\n";
    }
}
echo "continue 2 \n";
for($i = 0; $i < 5; $i++) {
    echo $i. "\n";
    for($j = 0; $j < 4; $j++) {
        if($j === 2) continue 2;
        echo " ". $j. "\n";
    }
}

continue 
0
 0
 1
 3
1
 0
 1
 3
2
 0
 1
 3
3
 0
 1
 3
4
 0
 1
 3
continue 2 
0
 0
 1
1
 0
 1
2
 0
 1
3
 0
 1
4
 0
 1
  • 1つ目の繰り返し処理では、continueの後に階層を指定していないので現在いる内側のforの処理$jをスキップ
    (✅ continue; と continue 1; は同じ意味です)
  • 2つ目の繰り返し処理では、階層は2指定しているので、現在のいるfor文自体をぬけて親の階層の繰り返し処理に進みます

代替構文の場合注意、、continue文の警告

代替構文とは

PHPの 「代替構文(alternative syntax)」 は、テンプレートの中でHTMLとPHPをうまく混ぜるために用意された、見た目がスッキリする書き方ですね!

  • switch文で代替構文を使用しない場合
$difficulty = 'hard';

switch ($difficulty) {
    case 'easy':
        echo 'かんたんモード';
        break;
    case 'normal':
        echo 'ふつうモード';
        break;
    case 'hard':
        echo 'むずかしいモード';
        break;
    default:
        echo '不明な難易度です';
}
  • switch文で代替構文を使用する場合
<?php switch ($difficulty): ?>
<?php case 'easy': ?>
    <p>かんたんモード</p>
<?php break; ?>
<?php case 'normal': ?>
    <p>ふつうモード</p>
<?php break; ?>
<?php case 'hard': ?>
    <p>むずかしいモード</p>
<?php break; ?>
<?php default: ?>
    <p>不明なモード</p>
<?php endswitch; ?>

注意点として「switchから最初のcaseのあいだに余計なもの」があると下記のエラーになります

PHP Parse error:  syntax error, unexpected T_INLINE_HTML "xx", expecting "endswitch" or "case" or "default" in ....

PHP側ではswitchがあれば、次はcaseを待っている状態になってて、そこでインデントなどそれ以外のものがくると構文おかしくない?となってしまいます

HTMLテンプレート内のPHP switch文:正しい書き方 ❌ 間違った書き方 <?php switch ($difficulty): ?> 空白行(構文エラー) <?php case ‘easy’: ?> ← エラー <p>かんたんモード</p> <?php break; ?> <?php case ‘normal’: ?> <p>ふつうモード</p> <?php break; ?> <?php endswitch; ?> 空白行(構文エラーの原因) PHPコードのインデント(エラー) HTMLコンテンツのインデント(問題なし) ✅ 正しい書き方 <?php switch ($difficulty): <?php case ‘easy’: ?> <p>かんたんモード</p> <?php break; ?> <?php case ‘normal’: ?> <p>ふつうモード</p> <?php break; ?> <?php endswitch; ?> case文がswitchの直後(インデントなし) HTMLコンテンツの適切なインデント(推奨)

PHP: continue – Manual
https://www.php.net/manual/ja/control-structures.continue.php