Break neobligātums PHP

Komanda break ir neobligāta. Bez tās, tomēr, case bloku darbība būs negaidīta. Apskatīsim piemērā. Pieņemsim, ka mums ir šāds kods:

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

Noņemsim no tā visus break, un mainīgajā $num sākumā ierakstīsim skaitli 3.

Sākumā viss darbosies tā, kā darbojās:

php<?php
  $num = 3; // pieņemsim, ka šeit ir skaitlis 3
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Pēc palaišanas kods izvadīs 3 - viss labi
?>

Ierakstīsim tagad mainīgajā $num skaitli 2. Šajā gadījumā mums, kā gaidīts, izpildīsies case 2, un tad negaidīti arī case 3:

php<?php
  $num = 2;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Pēc palaišanas kods izvadīs 2 un pēc tam 3
?>

Ja mainīgajā $num ierakstītu skaitli 1, tad izpildītos visi case bloki:

php<?php
  $num = 1;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Pēc palaišanas kods izvadīs 1, tad 2 un pēc tam 3
?>

Tātad sanāk, ka, ja nav break, pēc iecerētā case izpildes, izpildīsies arī visi case zem tā. Dažreiz šo īpatnību izmanto, risinot uzdevumus.

Nākamajā piemērā, ja mainīgajam $num ir vērtība 1 vai 2, tad mainīgajā $res ierakstīsies 'a'. Ja mainīgajam $num ir vērtība 3, tad mainīgajā $res ierakstīsies 'b':

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

Iepriekš es rakstīju, ka dažreiz šo īpatnību izmanto, bet es, kopumā, neatbalstu tās lietošanu, jo kods kļūst ne ļoti acīmredzams.

Acīmredzamāk šādu uzdevumu atrisināt ar if:

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