Computer >> 컴퓨터 >  >> 프로그램 작성 >> PHP

PHP 생성기 대 반복기 개체

<시간/>

소개

제너레이터 함수가 호출되면 내부적으로 제너레이터 클래스의 새로운 객체가 반환됩니다. 반복자를 구현합니다. 상호 작용. 반복자 인터페이스는 다음과 같은 추상 메소드를 정의합니다.

  • 반복자::현재 — 현재 요소 반환
  • 반복자::키 — 현재 요소의 키 반환
  • 반복자::다음 — 다음 요소로 이동
  • 반복자::되감기 — 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