제너레이터 함수가 호출되면 내부적으로 새로운 제너레이터 클래스 객체가 반환됩니다. Iterator 인터페이스를 구현합니다. 반복자 인터페이스는 다음과 같은 추상 메소드를 정의합니다.
생성기는 전향 전용 반복자 개체로 작동합니다. , 그리고 생성기로 값을 보내고 생성기에서 값을 반환하는 것을 포함하여 생성기의 상태를 조작하는 호출 가능한 메서드를 제공합니다.
아래 예에서 생성기 함수는 oreach 루프를 사용하여 반복할 수 있는 생성기 개체의 파일에 행을 생성합니다. current() 및 next()와 같은 반복자 메서드도 호출할 수 있습니다. 그러나 생성기는 정방향 반복자이므로 rewind() 메서드를 호출하면 예외가 발생합니다.
<?php function filegenerator($name) { $fileHandle = fopen($name, 'r'); while ($line = fgets($fileHandle)) { yield $line; } fclose($fileHandle); } $name="test.txt"; $file=filegenerator($name); foreach ($file as $line) echo $line; $file->rewind(); echo $file->current(); $file->next(); echo $file->current(); ?>
파일 행을 반복한 후 다음과 같은 치명적인 오류가 표시됩니다
PHP User Defined Functions PHP Function Arguments PHP Variable Functions PHP Internal (Built-in) Functions PHP Anonymous functions PHP Arrow Functions PHP Fatal error: Uncaught Exception: Cannot rewind a generator that was already run
위 내용은 PHP 생성기와 반복자 객체 비교의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!