在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中的错误还是这种预期和记录的行为?我很困惑。