Опционалност на break во PHP

Командата break е опционална. Без неа, сепак, однесувањето на блоковите case ќе биде неочекувано. Ајде да погледнеме на пример. Нека имаме ваков код:

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

Да ги отстраниме сите break, а во променливата $num за почеток да запишеме број 3.

Засега сè ќе работи како што работеше:

php<?php
  $num = 3; // нека овде биде бројот 3
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // По стартувањето кодот ќе испише 3 - сè е во ред
?>

Ајде сега во променливата $num да запишеме број 2. Во овој случај, очекувано ќе се изврши case 2, а потоа неочекувано и case 3:

php<?php
  $num = 2;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // По стартувањето кодот ќе испише 2, а потоа 3
?>

Ако во променливата $num се запише број 1, тогаш воопшто ќе се извршат сите конструкции case:

php<?php
  $num = 1;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // По стартувањето кодот ќе испише 1, потоа 2, а потоа 3
?>

Односно, излегува дека при отсуство на break по извршувањето на посакуваниот case, ќе се извршат и сите case под него. Понекогаш оваа особеност се користи при решавање на проблеми.

Во следниот пример, ако променливата $num ја има вредноста 1 или 2, тогаш во променливата $res ќе се запише 'a'. Ако пак променливата $num ја има вредноста 3, тогаш во променливата $res ќе се запише 'b':

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

Погоре напишав дека понекогаш таквата особеност се користи, но јас, воопшто, не препорачувам да се користи, бидејќи кодот станува не многу очигледен.

Поочигледно е ваквиот проблем да се реши со if изрази:

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