bentools/rewindable-generator

现在你的生成器可以回滚了。

1.2 2023-12-23 15:48 UTC

This package is auto-updated.

Last update: 2024-09-23 17:17:10 UTC


README

Latest Stable Version License CI Workflow Coverage Total Downloads

可回滚生成器

$generator = (function () {
    yield 'foo';
    yield 'bar';
})();

var_dump(iterator_to_array($generator)); // ['foo', 'bar']
var_dump(iterator_to_array($generator)); // Boom

PHP 致命错误:未捕获异常:无法遍历已关闭的生成器

是的,我知道。这很烦人。但是这里有一个小的类,它会利用 CachingIterator 来使你的生成器可回滚。

非常简单

use BenTools\RewindableGenerator;

$generator = (function () {
    yield 'foo';
    yield 'bar';
})();

$iterator = new RewindableGenerator($generator);

var_dump(iterator_to_array($iterator)); // ['foo', 'bar']
var_dump(iterator_to_array($iterator)); // ['foo', 'bar']

警告:如果你打算回滚一个还没有到达末尾的生成器(即你 break 循环),将会抛出异常,因为 CachingIterator 不会缓存所有项目。

安装

composer require bentools/rewindable-generator

测试

./vendor/bin/phpunit