⊗ppPmCdBNM 100 of 447 menu

Valfriheten av break i PHP

Kommandot break är valfritt. Utan det kommer dock beteendet hos blocken case att bli oväntat. Låt oss titta på ett exempel. Anta att vi har följande kod:

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

Låt oss ta bort alla break i den, och i variabeln $num till att börja med skriva in talet 3.

För tillfället kommer allt att fungera som det gjorde:

<?php $num = 3; // låt oss säga att det är 3 här switch ($num) { case 1: echo 1; case 2: echo 2; case 3: echo 3; } // Efter uppstart kommer koden att skriva ut 3 - allt är bra ?>

Låt oss nu i variabeln $num skriva talet 2. I det här fallet kommer vår förväntade case 2 att utföras, och sedan oväntat även case 3:

<?php $num = 2; switch ($num) { case 1: echo 1; case 2: echo 2; case 3: echo 3; } // Efter uppstart kommer koden att skriva ut 2 och sedan 3 ?>

Om vi däremot i variabeln $num skriver talet 1, kommer alla konstruktioner case att utföras:

<?php $num = 1; switch ($num) { case 1: echo 1; case 2: echo 2; case 3: echo 3; } // Efter uppstart kommer koden att skriva ut 1, sedan 2 och sedan 3 ?>

Det visar sig alltså att i avsaknad av break, efter exekvering av den avsedda case, kommer även alla case under den att exekveras. Ibland används denna egenskap när man löser problem.

I följande exempel, om variabeln $num har värdet 1 eller 2, så kommer 'a' att skrivas in i variabeln $res. Om variabeln $num däremot har värdet 3, så kommer 'b' att skrivas in i variabeln $res:

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

Ovan skrev jag att denna egenskap ibland används, men jag rekommenderar i allmänhet inte att använda den, eftersom koden blir inte särskilt uppenbar.

Det är mer uppenbart att lösa ett sådant problem med if-satsar:

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