El while repite mientras una condición sea verdadera. Se usa cuando no sabes de
antemano cuántas vueltas habrá: hasta juntar cierto monto, hasta encontrar un dato,
hasta que se acaben las filas que devolvió la base de datos.
while
El recorrido de un while
flowchart TD
A["Antes del ciclo<br/>preparar la variable"] --> B{"¿Condición?"}
B -->|sí| C["Cuerpo<br/>(debe acercarse al final)"]
C --> B
B -->|no| D["Sigue el programa"]
Sabes cuántas vueltas hay: del 1 al 10, de 1960 a hoy
while
Repites hasta que algo pase: llegar a una meta, encontrar un dato
foreach
Recorres un arreglo elemento por elemento (en la Parte 5)
El ciclo infinito
Si la condición nunca se vuelve falsa, el ciclo no termina.
Incorrecto: olvidar el avance
<?php$i = 1;while ($i <= 5) { echo $i;}
$i vale siempre 1: la condición es siempre verdadera. En la terminal se llena la
pantalla de unos; en el navegador, la página queda cargando sin terminar.
Correcto: algo dentro del cuerpo acerca la condición al final
Antes de ejecutar un while, pregúntate: ¿qué línea del cuerpo cambia la variable
de la condición? Si no hay ninguna, es infinito.
Cómo detenerlo
Dónde corre
Qué hacer
php archivo.php en la terminal
Ctrl + C
En el navegador, con php -S
Ctrl + C en la terminal del servidor, y vuelve a levantarlo
PHP se detiene solo a los 30 segundos… en el navegador
Cuando se ejecuta desde el servidor, PHP corta cualquier página que tarde más de
30 segundos, con Fatal error: Maximum execution time of 30 seconds exceeded. En
la terminal ese límite no existe: ahí se detiene con Ctrl + C.
Mientras tanto, php -S atiende una solicitud a la vez: si una página quedó
pegada en un ciclo infinito, las demás páginas del sitio tampoco cargan.
do while
Igual que while, pero revisa la condición al final: el cuerpo se ejecuta al
menos una vez.
<?php$intentos = 0;do { $intentos++; $dado = random_int(1, 6); echo "Intento $intentos: salió $dado\n";} while ($dado !== 6);echo "Salió un 6 en $intentos intentos\n";
Intento 1: salió 3Intento 2: salió 1Intento 3: salió 6Salió un 6 en 3 intentos
(La salida cambia cada vez: es al azar.) Aquí do while calza, porque hay que tirar
el dado antes de poder preguntar si salió 6. Es el ciclo menos usado de los tres.
continue: saltar a la siguiente vuelta
continue termina la vuelta actual y pasa a la siguiente, sin ejecutar lo que queda
del cuerpo.