PHP 7.0.6 Released

Generator::rewind

(PHP 5 >= 5.5.0, PHP 7)

Generator::rewindRé-initialise l'itérateur

Description

public void Generator::rewind ( void )

Si l'itération a déjà commencée, cette méthode lancera une exception.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Aucune valeur n'est retournée.

add a note add a note

User Contributed Notes 2 notes

up
1
uther at somewherebetweennowhere dot net
9 months ago
I'm guessing the *only* purpose for this even existing is so that it is compatible with the Iterator interface o_O
up
1
i'm pati on stackoverflow
26 days ago
Actually, this method can be useful to test a generator before iterating, as it executes your function up to the first yield statement. I.e. if you try to read a non-existent file in a generator, an error will normally occur only in client code foreach()'s first iteration. Sometimes this can be critical to check beforehand.

Take a look at a modified example from here:
http://php.net/manual/ru/language.generators.overview.php#112985

<?php

function getLines($file) {
   
$f = fopen($file, 'r');
    try {
        while (
$line = fgets($f)) {
            yield
$line;
        }
    } finally {
       
fclose($f);
    }
}

$getLines = getLines('no_such_file.txt');
$getLines->rewind(); // with ->rewind(), a file read error will be thrown here and a log file will not be cleared

openAndClearLogFile();

foreach (
$getLines as $n => $line) { // without ->rewind(), the script will die here and your log file will be cleared
   
writeToLogFile('reading: ' . $line . "\n");
}

closeLogFile();

?>

P.S.: When you iterate over a generator after ->rewind(), you'll get the first yielded value immediately, as the preceding code was already executed.
To Top