PHP Generator::current() 方法
Generator::current()
返回生成器的当前 yield 的值
(PHP 5 >= 5.5.0, PHP 7)
方法原型
public mixed Generator::current ( void )
从原型中可以看出,该方法没有参数,但会返回一个值,这个值就是生成器当前 yield 的值
其实该方法返回的值,就是 foreach(generate() as $k => $v )
中的 $v
。因此,这个方法极少自己调用,是提供给 foreach
用的
范例
我们写一个范例演示下 current()
方法,通过对比,你就知道和 foreach 中的 value 是同一个值
<?php function gen_zero_to_ten() { for ($i = 1; $i <= 10; $i++) { yield $i; } } $generator = gen_zero_to_ten(); foreach ($generator as $value) { echo $value , " === " ,$generator->current(), PHP_EOL; }
输出结果如下
1 === 1 2 === 2 3 === 3 4 === 4 5 === 5 6 === 6 7 === 7 8 === 8 9 === 9 10 === 10
current() 方法的使用场景
在 foreach
循环内部,current()
当然是没有使用场景的,但是,在其它地方则非常还用,比如我们可以使用它来做计数器
<?php function gen_zero_to_ten() { for ($i = 1; $i <= 10; $i++) { yield $i; } } $generator = gen_zero_to_ten(); echo '当前的值为: ', $generator->current(), "\n"; // 做一些其它事情 // 完成后生成下一个值 $generator->next(); echo '当前的值为: ', $generator->current(), "\n"; // 做一些其它事情 // 完成后生成下一个值 $generator->next(); echo '当前的值为: ', $generator->current(), "\n";
运行这段代码,输出结果如下
当前的值为: 1 当前的值为: 2 当前的值为: 3
如果我们把这个范例倒过来,从 10 数到 0 ,是不是有种: 我还能救,再救我一会儿的感觉 ?