Neobaveznost break u PHP

Naredba break je neobavezna. Međutim, bez nje, ponašanje blokova case biće neočekivano. Pogledajmo na primeru. Neka imamo sledeći kod:

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

Uklonimo iz njega sve break, a u promenljivu $num za početak upišimo broj 3.

Za sada će sve raditi kako je i radilo:

php<?php
  $num = 3; // neka ovde bude broj 3
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Nakon pokretanja kod će ispisati 3 - sve je u redu
?>

Sada upišimo u promenljivu $num broj 2. U ovom slučaju će se, po očekivanjima, izvršiti case 2, a zatim, neočekivano, i case 3:

php<?php
  $num = 2;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Nakon pokretanja kod će ispisati 2, a zatim 3
?>

Ako u promenljivu $num upišemo broj 1, onda će se izvršiti sve konstrukcije case:

php<?php
  $num = 1;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Nakon pokretanja kod će ispisati 1, zatim 2, a zatim 3
?>

Dakle, ispada da će se, u odsustvu break, nakon izvršenja željenog case, izvršiti i svi case ispod njega. Ponekad se ova osobenost koristi u rešavanju zadataka.

U sledećem primeru, ako promenljiva $num ima vrednost 1 ili 2, onda će se u promenljivu $res upisati 'a'. Ako promenljiva $num ima vrednost 3, onda će se u promenljivu $res upisati 'b':

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

Gore sam napisao da se ponekad koristi ova osobenost, ali ja, u principu, ne preporučujem da se njome koristite, jer kod postaje ne baš očigledan.

Očiglednije je rešiti takav zadatak pomoću if-ova:

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