Voliteľnosť break v PHP

Príkaz break je voliteľný. Bez neho však bude správanie blokov case neočakávané. Pozrime sa na príklad. Majme takýto kód:

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

Odstránime v ňom všetky break a do premennej $num na začiatok zapíšme číslo 3.

Zatiaľ všetko bude fungovať tak, ako fungovalo:

php<?php
  $num = 3; // nech je tu číslo 3
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Po spustení kód vypíše 3 - všetko v poriadku
?>

Skúsme teraz do premennej $num zapísať číslo 2. V tomto prípade sa očakávane vykoná case 2 a potom nečakane aj case 3:

php<?php
  $num = 2;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Po spustení kód vypíše 2 a potom 3
?>

Ak do premennej $num zapíšeme číslo 1, vykonajú sa všetky konštrukcie case:

php<?php
  $num = 1;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Po spustení kód vypíše 1, potom 2 a potom 3
?>

To znamená, že pri absencii break sa po vykonaní zamýšľaného case vykonajú aj všetky case pod ním. Niekedy sa táto zvláštnosť využíva pri riešení úloh.

V nasledujúcom príklade, ak má premenná $num hodnotu 1 alebo 2, tak do premennej $res sa zapíše 'a'. Ak má premenná $num hodnotu 3, tak do premennej $res sa zapíše 'b':

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

Hore som napísal, že niekedy sa táto zvláštnosť používa, ale vo všeobecnosti ju neodporúčam používať, pretože kód sa stáva nie veľmi zrejmým.

Zrejmejšie je vyriešiť takúto úlohu pomocou ifov:

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