包装在IteratorIterator

时间:2017-04-09 22:27:09

标签: php iterator generator

在PHP 5.6到7.1中,当包含在IteratorIterator类中时,Generator实例似乎无效:

<?php
function natural_numbers()
{
    for ($i = 1; ; $i++) {
        yield $i;
    }
}

$generator = natural_numbers();
var_dump($generator->valid());
var_dump($generator->current());

$wrap = new IteratorIterator(natural_numbers());
var_dump($wrap->valid());
var_dump($wrap->current());

$wrap->next();
var_dump($wrap->valid());
var_dump($wrap->current());

值得注意的是所有PHP版本的上述输出

bool(true)
int(1)

bool(false)
NULL

bool(true)
int(2)

另一方面,在HHVM中我得到了

bool(true)
int(1)

bool(true)
NULL

bool(true)
int(2)

这也很奇怪...迭代器是有效的,但它的当前值是null

这是PHP中的错误还是这种预期和记录的行为?我很困惑。

0 个答案:

没有答案