A break opcionálissága PHP-ben

A break parancs opcionális. Ugyanakkor, enélkül a case blokkok viselkedése váratlan lesz. Nézzük meg egy példán. Tegyük fel, hogy van egy ilyen kódunk:

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

Távolítsuk el belőle az összes break-et, és a változóba $num kezdetben írjunk be a 3 számot.

Egyelőre minden úgy fog működni, ahogy eddig is:

php<?php
  $num = 3; // tegyük fel, hogy itt a 3-as szám van
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // A futtatás után a kód kiírja a 3-ast - minden rendben
?>

Most írjuk be a $num változóba a 2 számot. Ebben az esetben várhatóan lefut a case 2, majd váratlanul a case 3 is:

php<?php
  $num = 2;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // A futtatás után a kód kiírja a 2-t, majd a 3-ast
?>

Ha viszont a $num változóba a 1 számot írjuk, akkor az összes case szerkezet le fog futni:

php<?php
  $num = 1;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // A futtatás után a kód kiírja az 1-et, majd a 2-t, majd a 3-ast
?>

Vagyis kiderül, hogy a break hiányában az eltervezett case végrehajtása után, az alatta lévő összes case is végrehajtódik. Néha ezt a sajátosságot felhasználják feladatok megoldásánál.

A következő példában, ha a $num változó értéke 1 vagy 2, akkor a $res változóba az 'a' kerül. Ha viszont a $num változó értéke 3, akkor a $res változóba az 'b' kerül:

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

Fentebb írtam, hogy néha ezt a sajátosságot felhasználják, de én, összességében, nem ajánlom a használatát, mert a kód kevésbé lesz nyilvánvaló.

Nyilvánvalóbb egy ilyen feladatot if-ekkel megoldani:

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