do
La palabra clave "do" en PHP inicia un bucle do...while que ejecuta un bloque de código al menos una vez. Aprende su sintaxis, usos y errores comunes.
La palabra clave do en PHP
La palabra clave do inicia un bucle do...while en PHP — una estructura de control que ejecuta un bloque de código repetidamente mientras una condición sea verdadera. Su característica definitoria es que la condición se comprueba al final del bucle, por lo que el cuerpo siempre se ejecuta al menos una vez, incluso cuando la condición es falsa desde el principio.
Esta página cubre la sintaxis de do...while, cómo difiere de un bucle while normal, las situaciones prácticas donde es más útil (validación de entrada, menús, lógica de reintento), los errores comunes que hay que evitar, y cómo controlar el bucle con break y continue.
Sintaxis
La palabra clave do se combina con la palabra clave while. El cuerpo va primero, luego la condición:
La sintaxis PHP de do
<?php
do {
// code to be executed
} while (condition);Dos detalles a recordar:
- La condición se evalúa después de cada pasada, por lo que el cuerpo se ejecuta una vez antes de que se compruebe.
- El cierre
while (condition);debe terminar con punto y coma — a diferencia de un buclewhilenormal, donde el punto y coma crearía un error.
do...while vs while
La diferencia está en cuándo se comprueba la condición. Un bucle while normal comprueba la condición antes de la primera iteración, por lo que puede ejecutarse cero veces. Un bucle do...while comprueba después, por lo que se ejecuta al menos una vez.
<?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);Salida:
do: 10El bucle while no imprime nada; el bucle do...while imprime una línea. Usa do...while siempre que el cuerpo deba ejecutarse al menos una vez independientemente del estado inicial.
Ejemplos
Contar e iterar sobre un array — nota que PHP_EOL (o "\n") imprime una nueva línea, por lo que cada valor aparece en su propia línea:
Ejemplos de 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 lineCuándo usar do...while
La garantía de "se ejecuta al menos una vez" hace que do...while sea la opción natural para algunos patrones recurrentes.
Lógica de reintento y validación
Intenta una acción una vez, luego sigue reintentando mientras falle:
<?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 attemptsDado que el primer intento siempre debe ocurrir, do...while resulta más natural aquí que un bucle while con código de configuración duplicado.
Bucles de menú
Muestra un menú, lee la entrada y repite hasta que el usuario elija salir — el menú debe mostrarse al menos una vez:
<?php
$choice = '';
do {
// show menu, read $choice from input...
// for this example we just stop immediately
$choice = 'q';
} while ($choice !== 'q');
echo "Goodbye\n";Controlar el bucle: break y continue
Dentro del cuerpo de un do...while puedes usar break para salir del bucle anticipadamente y continue para saltar a la siguiente comprobación de la condición.
<?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, 5Ten en cuenta que continue salta a la comprobación de la condición, no de vuelta al inicio del cuerpo — el bucle sigue reevaluando while (true) y continúa.
Errores comunes
- Olvidar el punto y coma al final después de
while (condition)provoca un error de análisis. - Bucles infinitos: si la condición nunca se vuelve falsa (y no hay
break), el bucle se ejecuta indefinidamente. Asegúrate de que algo dentro del cuerpo cambie los valores de los que depende la condición. - Error de índice al recorrer arrays: con
do...while, el cuerpo se ejecuta antes de la comprobación de límites, por lo que un array vacío puede provocar un error de "índice indefinido". Protégete conif (!empty($arr))o usaforeachpara los arrays.
Bucles relacionados
PHP ofrece varias construcciones de bucle — elige la que mejor se adapte a tu intención:
while— comprueba la condición antes de cada pasada (puede ejecutarse cero veces).for— un bucle basado en contador con init/condición/incremento integrados.foreach— itera directamente sobre arrays y objetos.- Resumen de bucles PHP — una comparación lado a lado de los cuatro.
Conclusión
El bucle do...while es la herramienta adecuada cuando un bloque de código debe ejecutarse al menos una vez y luego repetirse mientras se cumpla una condición — la validación de entrada, la lógica de reintento y los menús interactivos son ejemplos clásicos. Recuerda el punto y coma al final, asegúrate de que la condición pueda eventualmente volverse falsa, y usa break/continue para afinar el flujo.