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 ,是不是有种: 我还能救,再救我一会儿的感觉 ?

返回上一级

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.