소개
제너레이터 함수가 호출되면 내부적으로 제너레이터 클래스의 새로운 객체가 반환됩니다. 반복자를 구현합니다. 상호 작용. 반복자 인터페이스는 다음과 같은 추상 메소드를 정의합니다.
- 반복자::현재 — 현재 요소 반환
- 반복자::키 — 현재 요소의 키 반환
- 반복자::다음 — 다음 요소로 이동
- 반복자::되감기 — Iterator를 첫 번째 요소로 되감기
- 반복자::유효함 — 현재 위치가 유효한지 확인
Generator는 순방향 전용 반복기 역할을 합니다. 개체는 값을 보내고 값을 반환하는 것을 포함하여 생성기의 상태를 조작하기 위해 호출할 수 있는 메서드를 제공합니다.
생성자로서의 생성기
다음 예제에서 생성기 함수는 oreach 루프를 사용하여 순회할 수 있는 생성기 객체의 파일에 줄을 생성합니다. 현재와 같은 반복자 메서드 () 및 다음 ()를 호출할 수도 있습니다. 그러나 Generator는 순방향 전용 반복자이므로 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