생성기 함수가 처음 호출되면 내부 생성기 클래스의 객체를 반환합니다. 이 객체는 전면 반복기 객체와 거의 동일한 방식으로 Iterator 인터페이스를 구현합니다.
Generator 클래스의 메소드 대부분은 Iterator 인터페이스의 메소드와 동일한 의미를 갖지만 생성기 객체에는 send()라는 추가 메소드가 있습니다.
CautionGenerator 객체는 new를 전달할 수 없습니다. 인스턴스화
예제 #1 Generator 클래스
<?php class Generator implements Iterator { public function rewind(); //Rewinds the iterator. 如果迭代已经开始,会抛出一个异常。 public function valid(); // 如果迭代关闭返回false,否则返回true. public function current(); // Returns the yielded value. public function key(); // Returns the yielded key. public function next(); // Resumes execution of the generator. public function send($value); // 发送给定值到生成器,作为yield表达式的结果并继续执行生成器. } ?>
Generator::send()
반복할 때 Generator::send()를 사용하면 값을 주입할 수 있습니다. into 생성기 메서드에서 주입된 값은 Yield 문에서 반환된 다음 생성기 메서드를 사용하여 모든 변수에 사용됩니다.
예제 #2 Generator::send()를 사용하여 값 삽입
<?php function printer() { while (true) { $string = yield; echo $string; } } $printer = printer(); $printer->send('Hello world!'); ?>
위 루틴은 다음을 출력합니다:
Hello world!