break
Guida alla parola chiave break in PHP: uscire da cicli e switch, break N per cicli annidati, differenze con continue.
La parola chiave break in PHP
break è un'istruzione di controllo del flusso che termina immediatamente il ciclo o switch più vicino. L'esecuzione salta alla prima riga dopo quella struttura — le iterazioni rimanenti vengono saltate. Funziona all'interno di for, foreach, while, do...while e switch.
Si usa break quando si è trovato ciò che si cercava, o si è raggiunta una condizione che rende inutile continuare: un record corrispondente in un elenco, un errore da cui non è possibile recuperare, o un caso switch già gestito. Fermarsi prima fa risparmiare lavoro e mantiene la logica chiara.
Questa pagina copre la sintassi, ogni tipo di ciclo, il caso switch, l'uscita da cicli annidati con break N, e come break differisce da continue.
Sintassi
<?php
while (condition) {
// code that runs each iteration
if (break_condition) {
break; // exit the loop right now
}
}
// execution continues here after breakQuando break_condition è vera, il ciclo termina e viene eseguita la riga successiva alla parentesi graffa di chiusura. La condizione è facoltativa — un semplice break; esce sempre — ma in pratica si usa quasi sempre con un if, altrimenti il ciclo verrebbe eseguito una sola volta.
Uscire da un ciclo
L'uso più comune è interrompere una ricerca non appena si ottiene una risposta. Una volta trovato il valore non ha senso continuare a scorrere il resto dell'array.
<?php
$haystack = [10, 22, 35, 47, 58];
$target = 35;
$found = false;
foreach ($haystack as $index => $value) {
if ($value === $target) {
$found = true;
echo "Found $target at index $index\n";
break; // stop — no need to check the rest
}
}
if (!$found) {
echo "Not found\n";
}
// Output: Found 35 at index 2Lo stesso schema funziona con gli altri tipi di ciclo. Qui break esce da un ciclo while (true) — un ciclo intenzionalmente infinito la cui unica uscita è il break:
Usare break in uno switch
All'interno di un'istruzione switch, break è ciò che impedisce all'esecuzione di "scorrere" nel caso successivo. Senza di esso, PHP continua a eseguire il codice nei casi seguenti a quello che corrisponde.
<?php
$role = "editor";
switch ($role) {
case "admin":
echo "Full access";
break;
case "editor":
echo "Can edit content";
break; // without this, "Read-only" would also run
default:
echo "Read-only";
}
// Output: Can edit contentUscire da cicli annidati con break N
Per impostazione predefinita break esce solo dal ciclo più interno. Per uscire da più livelli contemporaneamente, si passa un numero: break 2; esce da due strutture contenenti, break 3; da tre, e così via.
<?php
for ($i = 1; $i <= 3; $i++) {
foreach (['a', 'b', 'c'] as $letter) {
if ($letter === 'b') {
break 2; // exit BOTH the foreach and the for
}
echo "$i-$letter\n";
}
}
echo "Done\n";
// Output:
// 1-a
// DoneUn semplice break; qui terminerebbe solo il foreach interno, e il for esterno inizierebbe la sua iterazione successiva. break 2; termina entrambi, quindi l'esecuzione salta direttamente a echo "Done";.
Nota: Il numero dopo
breakdeve essere un letterale —break $level;è un errore fatale da PHP 5.4. Se è necessaria quella flessibilità, ristrutturare i cicli oppure spostarli in una funzione e usarereturn.
break vs. continue
Questi due sono facili da confondere:
breakferma completamente il ciclo e passa al codice successivo.continuesalta solo il resto dell'iterazione corrente e passa alla successiva — il ciclo continua.
Vedere break e continue per un confronto affiancato.
Errori comuni
- Dimenticare
breakin unoswitchcausa un fall-through accidentale, quindi vengono eseguiti più casi. Questo è a volte intenzionale (raggruppamento di casi), ma di solito è un bug. breakinfluisce solo sui cicli e sulloswitch— non è possibile usarlo per uscire da un bloccoifo da una funzione. Usarereturnper uscire da una funzione.- Contare i livelli per
break Nè fragile; se in seguito si racchiude il codice in un altro ciclo, il numero risulta sbagliato. Mantenere i cicli annidati poco profondi.
Argomenti correlati
- continue — passare all'iterazione successiva invece di fermarsi
- ciclo for e ciclo while
- ciclo foreach — iterare sugli array
- switch — dove
breaksepara i casi