current() 會推進未使用的產生器,與 next() 相同,它會執行第一步/第一次迭代。後續呼叫則不會。
未 yield 的值將會是 NULL
(PHP 5 >= 5.5.0, PHP 7, PHP 8)
Generator::current — 取得 yield 的值
此函式沒有參數。
回傳 yield 的值。
我認為「gib-o-master」的說法是錯誤的。
Generator::current 方法並不會推進「未觸及的生成器」。
讓我舉個例子
function y1()
{
yield 1;
}
$g = y1();
if ($g->valid()) { //此時,PHP 輸出 "valid"
echo "valid\n";
}
echo "目前值 v:" . $g->current() . "\n"; //此時,PHP 輸出 目前值 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 "使用 current 函式 : ".$generator->current(),PHP_EOL;
}
?>