Valgfriheten av break i PHP

Kommandoen break er valgfri. Uten den vil imidlertid oppførselen til case-blokkene være uventet. La oss se på et eksempel. La oss si vi har kode som dette:

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

La oss fjerne alle break i den, og i variabelen $num til å begynne med, skrive inn tallet 3.

Foreløpig vil alt fungere slik det gjorde:

php<?php
  $num = 3; // la oss si tallet her er 3
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Etter oppstart vil koden skrive ut 3 - alt er bra
?>

La oss nå i variabelen $num skrive inn tallet 2. I dette tilfellet vil case 2 forventningsfullt utføres, og deretter uventet også case 3:

php<?php
  $num = 2;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Etter oppstart vil koden skrive ut 2, og deretter 3
?>

Hvis man derimot skriver tallet 1 inn i variabelen $num, vil alle case-konstruksjonene utføres:

php<?php
  $num = 1;
  
  switch ($num) {
    case 1:
      echo 1;
    case 2:
      echo 2;
    case 3:
      echo 3;
  }
  
  // Etter oppstart vil koden skrive ut 1, deretter 2, og deretter 3
?>

Det vil si at det viser seg at ved fravær av break, etter utførelsen av den tiltenkte case, vil alle case under den også utføres. Noen ganger brukes denne egenskapen når man løser oppgaver.

I det følgende eksempelet, hvis variabelen $num har verdien 1 eller 2, vil strengen 'a' bli skrevet inn i variabelen $res. Hvis variabelen $num derimot har verdien 3, vil strengen 'b' bli skrevet inn i variabelen $res:

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

Tidligere skrev jeg at noen ganger brukes denne egenskapen, men jeg anbefaler egentlig ikke å bruke den, fordi koden blir ikke veldig opplagt.

Det er mer åpenbart å løse en slik oppgave med if-setninger:

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