W3docs

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 break

Quando 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 2

Lo 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:

php— editable, runs on the server

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 content

Uscire 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
// Done

Un 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 break deve 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 usare return.

break vs. continue

Questi due sono facili da confondere:

  • break ferma completamente il ciclo e passa al codice successivo.
  • continue salta solo il resto dell'iterazione corrente e passa alla successiva — il ciclo continua.

Vedere break e continue per un confronto affiancato.

Errori comuni

  • Dimenticare break in uno switch causa un fall-through accidentale, quindi vengono eseguiti più casi. Questo è a volte intenzionale (raggruppamento di casi), ma di solito è un bug.
  • break influisce solo sui cicli e sullo switch — non è possibile usarlo per uscire da un blocco if o da una funzione. Usare return per 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

Esercitazione

Pratica
Cosa fa l'istruzione 'break' in PHP?
Cosa fa l'istruzione 'break' in PHP?
Was this page helpful?