卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章64334本站已运行4115

PHP生成器与迭代器对象的比较

PHP生成器与迭代器对象的比较

简介

当调用生成器函数时,内部会返回一个新的 Generator 类对象。它实现了迭代器接口。迭代器接口定义了以下抽象方法

  • Iterator::current - 返回当前元素
  • Iterator: :key — 返回当前元素的键
  • Iterator::next — 向前移动到下一个元素
  • 迭代器: :rewind — 将迭代器倒回到第一个元素
  • Iterator::valid — 检查当前位置是否有效

生成器充当仅前向迭代器对象,并提供可调用的方法来操纵生成器的状态,包括向生成器发送值和从生成器返回值。

生成器作为交互器

在下面的示例中,生成器函数在生成器对象的文件中生成行,可以使用 oreach 循环遍历这些行。还可以调用诸如 current() 和 next() 之类的迭代器方法。但是,由于生成器是只向前迭代器,因此调用 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
卓越飞翔博客
上一篇: 使一个字符串等于另一个字符串所需删除的最长子字符串的长度
下一篇: 在C语言中,什么是简单断言?
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏