PHP 8.3.21 Released!

do-while

(PHP 4, PHP 5, PHP 7, PHP 8)

Las bucles do-while se parecen mucho a las bucles while, pero la expresión es evaluada al final de cada iteración en lugar de al principio. La principal diferencia con respecto a la bucle while es que la primera iteración de la bucle do-while siempre se ejecuta (la expresión solo se evalúa al final de la iteración), lo cual no ocurre cuando se utiliza una bucle while (la condición se verifica al inicio de cada iteración, y si resulta false desde el principio, la bucle se detendrá de inmediato).

Solo existe una sintaxis posible para las bucles do-while:

<?php
$i
= 0;
do {
echo
$i;
} while (
$i > 0);
?>

La bucle anterior solo se ejecutará una vez, ya que cuando la expresión es evaluada, resulta false (ya que la variable $i no es mayor que 0) y la ejecución de la bucle se detiene.

Los usuarios familiarizados con C están acostumbrados a un uso diferente de las bucles do-while, que permite detener la ejecución de la bucle en medio de las instrucciones, encapsulando en un do-while(0) la función break. El siguiente código muestra un uso posible:

<?php
do {
if (
$i < 5) {
echo
"i no es suficientemente grande";
break;
}
$i *= $factor;
if (
$i < $minimum_limit) {
break;
}
echo
"i es bueno";

/* ...procesamiento de i... */

} while (0);
?>

Es posible utilizar el operador goto en lugar de este truco.

add a note

User Contributed Notes 1 note

up
33
jayreardon at gmail dot com
18 years ago
There is one major difference you should be aware of when using the do--while loop vs. using a simple while loop: And that is when the check condition is made.

In a do--while loop, the test condition evaluation is at the end of the loop. This means that the code inside of the loop will iterate once through before the condition is ever evaluated. This is ideal for tasks that need to execute once before a test is made to continue, such as test that is dependant upon the results of the loop.

Conversely, a plain while loop evaluates the test condition at the begining of the loop before any execution in the loop block is ever made. If for some reason your test condition evaluates to false at the very start of the loop, none of the code inside your loop will be executed.
To Top