> 백엔드 개발 > PHP 튜토리얼 > PHP 생성기와 반복자 객체 비교

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

王林
풀어 주다: 2023-09-16 17:42:02
앞으로
999명이 탐색했습니다.

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으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿