>  기사  >  백엔드 개발  >  PHP 생성기와 반복자 객체 비교

PHP 생성기와 반복자 객체 비교

王林
王林앞으로
2023-09-16 17:41:02954검색

PHP 생성기와 반복자 객체 비교

소개

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

  • Iterator::current - 현재 요소를 반환합니다.
  • Iterator: :key — 현재 요소의 키를 반환합니다.
  • Iterator::next — 다음으로 이동합니다. 다음 요소
  • Iterator: :rewind — 반복자를 첫 번째 요소로 되감기
  • Iterator::valid — 현재 위치가 유효한지 확인

생성기는 전향 전용 반복자 개체로 작동합니다. , 그리고 생성기로 값을 보내고 생성기에서 값을 반환하는 것을 포함하여 생성기의 상태를 조작하는 호출 가능한 메서드를 제공합니다.

인터랙터로서의 생성기

아래 예에서 생성기 함수는 oreach 루프를 사용하여 반복할 수 있는 생성기 개체의 파일에 행을 생성합니다. current() 및 next()와 같은 반복자 메서드도 호출할 수 있습니다. 그러나 생성기는 정방향 반복자이므로 rewind() 메서드를 호출하면 예외가 발생합니다.

Example

<?php
function filegenerator($name) {
   $fileHandle = fopen($name, &#39;r&#39;);
   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();
?>

Output

파일 행을 반복한 후 다음과 같은 치명적인 오류가 표시됩니다

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제