⊗ppPmCdBNM 100 of 447 menu

Valgfriheden af break i PHP

Kommandoen break er valgfri. Uden den vil opførslen af case-blokkene dog være uventet. Lad os se på et eksempel. Antag, at vi har følgende kode:

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

Lad os fjerne alle break i den, og i variablen $num til at starte med skrive tallet 3.

Indtil nu vil alt fungere, som det plejede:

<?php $num = 3; // lad os sige tallet er 3 her switch ($num) { case 1: echo 1; case 2: echo 2; case 3: echo 3; } // Efter kørsel vil koden udskrive 3 - alt er godt ?>

Lad os nu skrive tallet 2 i variablen $num. I dette tilfælde vil case 2 forventeligt blive udført, og derefter uventet også case 3:

<?php $num = 2; switch ($num) { case 1: echo 1; case 2: echo 2; case 3: echo 3; } // Efter kørsel vil koden udskrive 2 og derefter 3 ?>

Hvis vi derimod skriver tallet 1 i variablen $num, vil alle case-konstruktioner blive udført:

<?php $num = 1; switch ($num) { case 1: echo 1; case 2: echo 2; case 3: echo 3; } // Efter kørsel vil koden udskrive 1, derefter 2 og derefter 3 ?>

Det viser sig altså, at ved fravær af break, efter udførelsen af den tiltænkte case, vil alle case under den også blive udført. Undertiden bruges denne egenskab, når man løser opgaver.

I det følgende eksempel, hvis variablen $num har værdien 1 eller 2, så bliver 'a' skrevet i variablen $res. Hvis variablen $num derimod har værdien 3, så bliver 'b' skrevet i variablen $res:

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

Jeg skrev ovenfor, at denne egenskab undertiden bruges, men jeg anbefaler generelt set ikke at bruge den, da koden bliver mindre indlysende.

Det er mere tydeligt at løse en sådan opgave med if-sætninger:

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