Опционалност 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;
?>