Opționalitatea break în PHP

Instrucțiunea break este opțională. Fără ea, însă, comportamentul blocurilor case va fi neașteptat. Să ne uităm la un exemplu. Să presupunem că avem următorul cod:

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

Să eliminăm toate instrucțiunile break, iar în variabila $num pentru început să atribuim numărul 3.

Pentru moment, totul va funcționa așa cum a funcționat:

php<?php
  $num = 3; // să presupunem că aici este numărul 3
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // După execuție, codul va afișa 3 - totul este în regulă
?>

Să atribuim acum variabilei $num numărul 2. În acest caz, se va executa așteptat case 2, apoi, în mod neașteptat, și case 3:

php<?php
  $num = 2;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // După execuție, codul va afișa 2, apoi 3
?>

Dacă variabilei $num i se atribuie numărul 1, atunci se vor executa toate constructiile case:

php<?php
  $num = 1;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // După execuție, codul va afișa 1, apoi 2, apoi 3
?>

Adică, se dovedește că, în absența break, după executarea case-ului intenționat, se vor executa și toate case-urile de sub el. Uneori această particularitate este folosită în rezolvarea problemelor.

În următorul exemplu, dacă variabila $num are valoarea 1 sau 2, atunci în variabila $res se va scrie 'a'. Dacă variabila $num are valoarea 3, atunci în variabila $res se va scrie 'b':

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

Mai sus am spus că uneori această particularitate este folosită, dar, în general, nu recomand să o folosiți, deoarece codul devine mai puțin evident.

Este mai evident să rezolvi o astfel de problemă cu instrucțiuni if:

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