Незадължителност на 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;
?>