php群发不用foreach,如何在没有foreach的情况下使用PHP生成器?

第一个产生的价值没有被吞噬,你只是从来没有看过它.

$g = powGenerator();

echo $g->current(); //a

你然后两次发送值并恢复执行,$g-> valid()在此之后为真,因为你没有在第三次收益后恢复 – 发电机不完整而且可能还有更多要做的事情.考虑:

function powGenerator() {

yield pow((yield 'a'), (yield 'b'));

echo "Okay, finishing here now!\n";

}

$g = powGenerator();

echo $g->current(), "\n"; //a

echo $g->send(10), "\n"; //b

echo $g->send(2), "\n"; //100

$g->next(); // Resumes execution of the generator,

// which prints its own message and completes.

var_dump($g->valid()); //false

这个’输出:

a

b

100

Okay, finishing here now!

bool(false)

function powGenerator() {

return pow((yield 'a'), (yield 'b'));

echo "This will never print.";

}

$g = powGenerator();

echo $g->current(), "\n"; //a

echo $g->send(10), "\n"; //b

echo $g->send(2), "\n"; // Prints just the newline, you're moving on

// to a return which you must get explicitly.

var_dump($g->valid()); // Generator complete, you're free to get the return.

echo $g->getReturn(), "\n";

哪个输出:

a

b

bool(false)

100

至于在没有foreach的情况下单步执行它们 – Generator实现了Iterator,所以它有适当的方法来处理它:current,key,next,rewind和valid.有一点需要注意,如果你调用它,它将引发异常已经开始的发电机.

这样做的一个例子也演示了PHP 7的新generator delegation:

function letterGenerator() {

yield from range('a', 'z');

}

$g = letterGenerator();

while ($g->valid()) {

echo $g->current();

$g->next();

}

输出:

abcdefghijklmnopqrstuvwxyz

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值