W3docs

do

La parola chiave "do" in PHP avvia un ciclo do...while che esegue il blocco almeno una volta prima di verificare la condizione.

La parola chiave PHP do

La parola chiave do avvia un ciclo do...while in PHP — una struttura di controllo che esegue ripetutamente un blocco di codice finché una condizione rimane vera. La sua caratteristica distintiva è che la condizione viene verificata in fondo al ciclo, quindi il corpo viene eseguito sempre almeno una volta, anche quando la condizione è falsa fin dall'inizio.

Questa pagina tratta la sintassi di do...while, le differenze rispetto a un normale ciclo while, le situazioni pratiche in cui eccelle (validazione dell'input, menu, logica di retry), gli errori comuni da evitare e come controllare il ciclo con break e continue.

Sintassi

La parola chiave do si abbina alla parola chiave while. Il corpo viene prima, poi la condizione:

La sintassi PHP di do

<?php

do {
  // code to be executed
} while (condition);

Due dettagli da ricordare:

  • La condizione viene valutata dopo ogni passaggio, quindi il corpo viene eseguito una volta prima che venga mai controllata.
  • La while (condition); di chiusura deve terminare con un punto e virgola — a differenza di un normale ciclo while, dove il punto e virgola creerebbe un bug.

do...while vs while

La differenza sta in quando la condizione viene testata. Un normale ciclo while controlla la condizione prima della prima iterazione, quindi può eseguire zero volte. Un ciclo do...while controlla dopo, quindi viene eseguito almeno una volta.

<?php

$count = 10;

// while: condition false up front → body never runs
while ($count < 5) {
  echo "while: $count\n";
}

// do...while: body runs once before the check
do {
  echo "do: $count\n"; // prints "do: 10"
} while ($count < 5);

Output:

do: 10

Il ciclo while non stampa nulla; il ciclo do...while stampa una riga. Usa do...while ogni volta che il corpo deve essere eseguito almeno una volta indipendentemente dallo stato iniziale.

Esempi

Contare e iterare su un array — nota che PHP_EOL (o "\n") stampa un'interruzione di riga, quindi ogni valore finisce sulla propria riga:

Esempi di PHP do

<?php

// Example 1 — count from 1 to 5
$myNumber = 1;
do {
  echo $myNumber . PHP_EOL;
  $myNumber++;
} while ($myNumber <= 5);
// Prints 1, 2, 3, 4, 5 each on its own line

// Example 2 — walk through an array
$myArray = ["apple", "banana", "cherry", "date"];
$index = 0;
do {
  echo $myArray[$index] . PHP_EOL;
  $index++;
} while ($index < count($myArray));
// Prints apple, banana, cherry, date each on its own line

Quando usare do...while

La garanzia "viene eseguito almeno una volta" rende do...while la scelta naturale per alcuni schemi ricorrenti.

Logica di retry e validazione

Prova un'azione una volta, poi continua a riprovare finché fallisce:

<?php

$attempts = 0;
do {
  $attempts++;
  // Simulate: the 3rd attempt finally succeeds
  $password = $attempts < 3 ? "wrong" : "secret";
} while ($password !== "secret" && $attempts < 5);

echo "Logged in after $attempts attempts" . PHP_EOL;
// Logged in after 3 attempts

Poiché il primo tentativo dovrebbe sempre avvenire, do...while risulta più naturale qui rispetto a un ciclo while con codice di configurazione duplicato.

Cicli menu

Mostra un menu, leggi l'input e ripeti finché l'utente sceglie di uscire — il menu deve essere mostrato almeno una volta:

<?php

$choice = '';
do {
  // show menu, read $choice from input...
  // for this example we just stop immediately
  $choice = 'q';
} while ($choice !== 'q');

echo "Goodbye\n";

Controllo del ciclo: break e continue

All'interno del corpo di un do...while puoi usare break per uscire dal ciclo in anticipo e continue per saltare al controllo della condizione successiva.

<?php

$n = 0;
do {
  $n++;
  if ($n === 3) {
    continue; // skip printing 3, jump to the while check
  }
  if ($n > 5) {
    break;    // exit the loop entirely
  }
  echo $n . PHP_EOL;
} while (true);
// Prints 1, 2, 4, 5

Nota che continue salta al test della condizione, non torna all'inizio del corpo — il ciclo rivaluta comunque while (true) e continua.

Errori comuni

  • Dimenticare il punto e virgola finale dopo while (condition) causa un errore di parsing.
  • Cicli infiniti: se la condizione non diventa mai falsa (e non c'è break), il ciclo gira all'infinito. Assicurati che qualcosa all'interno del corpo modifichi i valori da cui dipende la condizione.
  • Errore di indice con gli array: con do...while, il corpo viene eseguito prima del controllo dei limiti, quindi un array vuoto può causare un errore "undefined offset". Proteggi con if (!empty($arr)) oppure usa foreach per gli array.

Cicli correlati

PHP offre diversi costrutti di ciclo — scegli quello che corrisponde alle tue intenzioni:

  • while — controlla la condizione prima di ogni passaggio (può eseguire zero volte).
  • for — un ciclo guidato da un contatore con init/condizione/incremento integrati.
  • foreach — itera direttamente su array e oggetti.
  • Panoramica sui cicli PHP — un confronto affiancato di tutti e quattro.

Conclusione

Il ciclo do...while è lo strumento giusto quando un blocco di codice deve essere eseguito almeno una volta e poi ripetersi finché una condizione è soddisfatta — la validazione dell'input, la logica di retry e i prompt di menu sono esempi classici. Ricorda il punto e virgola finale, assicurati che la condizione possa eventualmente diventare falsa e usa break/continue per affinare il flusso.

Pratica

Pratica
In PHP, qual è lo scopo del ciclo 'do-while'?
In PHP, qual è lo scopo del ciclo 'do-while'?
Was this page helpful?