Generator::rewind
Ejecuta el generador hasta e incluyendo el primer yield
Descripción
public Generator::rewind(): void
```php
Ejecuta el generador hasta e incluyendo el *primer* [`yield`](#control-structures.yield). Si el generador ya está en el *primer* [`yield`](#control-structures.yield), no se realizará ninguna acción. Si el generador ha avanzado más allá de una expresión [`yield`](#control-structures.yield), este método lanzará una `Exception`.
> [!NOTE]
> Se trata del método *primero* llamado al inicio de un ciclo [`foreach`](#control-structures.foreach). *No* se *ejecutará* *después* de los ciclos [`foreach`](#control-structures.foreach).
## Parámetros
Esta función no contiene ningún parámetro.
## Valores devueltos
No se retorna ningún valor.
## Ejemplos
Ejemplo de Generator::rewind
rewind(); // ¡Soy un generador!
// No ocurre nada aquí; el generador ya está reiniciado
$generator->rewind(); // Sin salida (NULL)
// Esto devuelve el generador al inicio de la primera expresión yield,
// si no lo está ya, e itera sobre el generador
foreach ($generator as $value) {
// Después de devolver el primer valor, el generador permanece en
// la primera expresión yield hasta que se reanude la ejecución y avance a la siguiente yield
echo $value, PHP_EOL; // 1
break;
}
// Reanudar y reiniciar nuevamente. No se produce ningún error ya que el generador no ha avanzado más allá del primer yield
$generator->rewind();
echo $generator->current(), PHP_EOL; // 1
// No se produce ningún error, el generador sigue en la primera yield
$generator->rewind();
// Esto hace avanzar el generador a la segunda expresión yield
$generator->next();
try {
// Esto lanzará una excepción,
// ya que el generador ya ha avanzado a la segunda yield
$generator->rewind(); // Error fatal: Exception no capturada: No se puede devolver un generador que ya ha sido ejecutado
} catch (Exception $e) {
echo $e->getMessage();
}
?>
```php
El ejemplo anterior mostrará:
¡Soy un generador!
1
1
No se puede devolver un generador que ya ha sido ejecutado