Break neprivalomumas PHP

Komanda break yra neprivaloma. Be jos, tačiau, case blokų elgsena bus netikėta. Pažiūrėkime pavyzdžiu. Tarkime, mes turime tokį kodą:

php<?php
  $num = 1;
  
  switch ($num) {
    case 1:
      echo 1;
    break;
    case 2:
      echo 2;
    break;
    case 3:
      echo 3;
    break;
  }
?>

Pašalinkime jame visus break, o į kintamąjį $num pradžiai įrašykime skaičių 3.

Kol kas viskas veiks taip, kaip ir veikė:

php<?php
  $num = 3; // tarkime čia skaičius 3
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Paleidus kodas išves 3 - viskas gerai
?>

Dabar į kintamąjį $num įrašykime skaičių 2. Šiuo atveju mūsų tikimasi vyks case 2, o po to netikėtai dar ir case 3:

php<?php
  $num = 2;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Paleidus kodas išves 2, o po to 3
?>

Jei į kintamąjį $num įrašyti skaičių 1, tai išvis vyks visos case konstrukcijos:

php<?php
  $num = 1;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Paleidus kodas išves 1, po to 2, o po to 3
?>

Tai pasirodo, kad be break, po numatyto case vykdymo, vykdomi ir visi case žemiau jo. Kartais šią ypatybę naudoja, sprendžiant uždavinius.

Kitame pavyzdyje, jei kintamasis $num turi reikšmę 1 arba 2, tai į kintamąjį $res bus įrašyta 'a'. Jei kintamasis $num turi reikšmę 3, tai į kintamąjį $res bus įrašyta 'b':

php<?php
  $num = 1;
  
  switch ($num) {
    case 1:
    case 2:
      $res = 'a';
    break;
    case 3:
      $res = 'b';
    break;
  }
  
  echo $res;
?>

Aukščiau rašiau, kad kartais šią ypatybę naudoja, bet aš, generally, nerekomenduoju jos naudoti, nes kodas tampa ne labai akivaizdus.

Akivaizdžiau išspręsti tokį uždavinį su if:

php<?php
  $num = 1;
  
  if ($num == 1 or $num == 2) {
    $res = 'a';
  }
  
  if ($num == 3) {
    $res = 'b';
  }
  
  echo $res;
?>