current() 使未触发的生成器前进,与 next() 一样,它执行第一步/迭代。后续调用不会。
未产生的值将为 NULL
(PHP 5 >= 5.5.0, PHP 7, PHP 8)
Generator::current — 获取产生的值
此函数没有参数。
返回产生的值。
我认为“gib-o-master”的说法是错误的。
Generator::current 方法不会使“未触发的生成器”前进。
让我举个例子
function y1()
{
yield 1;
}
$g = y1();
if ($g->valid()) { //此时,PHP 输出“valid”
echo "valid\n";
}
echo "current v:" . $g->current() . "\n"; //此时,PHP 输出 current v:1
if ($g->valid()) { //此时,PHP 仍然输出“valid”
echo "valid\n";
} else {
echo "not valid\n";
}
如果 Generator::current 方法使生成器前进,则上面的 If 语句应该输出“not valid”
<?php
function gen_one_to_three() {
for ($i = 1; $i <= 3; $i++) {
// 请注意,$i 在 yield 之间保留。
yield $i;
}
}
$generator = gen_one_to_three();
foreach ($generator as $value) {
echo "regular : ".$value , PHP_EOL;
echo "With current function : ".$generator->current(),PHP_EOL;
}
?>