函数名:Generator::send()
适用版本:PHP 5.5.0 及以上版本
用法:Generator::send() 函数用于向生成器发送一个值,并返回生成器的下一个值。它可用于控制生成器的迭代过程,允许在生成器的每次迭代中传递值。
语法:mixed Generator::send(mixed $value)
参数:
- $value:要发送给生成器的值。
返回值:
- 返回生成器的下一个值。
示例代码:
function generatorExample() {
echo "Start\n";
$val = yield; // 暂停生成器并接收一个值
echo "Received: " . $val . "\n";
yield; // 暂停生成器
echo "End\n";
}
$generator = generatorExample();
$generator->send(10); // 向生成器发送值10,继续执行生成器
$generator->send(20); // 向生成器发送值20,继续执行生成器
输出结果:
Start
Received: 10
End
在上面的示例中,我们定义了一个生成器函数 generatorExample()
,它会在接收到值后打印出该值,并在结束时打印出 "End"。然后,我们创建了一个生成器实例 $generator
,并使用 send()
方法向生成器发送两个值。第一个值是 10,它会被传递给生成器,并打印出 "Received: 10"。然后生成器继续执行,打印出 "End"。
注意事项:
- 在第一次调用生成器的时候,必须使用
next()
方法来启动生成器,而不能使用send()
方法。因为第一次调用生成器时,没有地方可以接收从send()
方法发送的值。 - 在生成器函数中,第一次调用
yield
语句时,它会暂停生成器并返回一个值。从第二次调用yield
语句开始,它会在每次调用send()
方法后继续执行生成器。 - 如果在生成器函数中不使用
yield
语句,而是直接使用return
语句来结束生成器,则send()
方法将会抛出一个GeneratorExit
异常。 - 如果在生成器函数中使用了
yield from
语句来委托生成器,则send()
方法会发送值到委托的生成器,而不是当前的生成器。 - 如果在生成器函数中使用了
yield
语句来返回一个值,则send()
方法在第一次调用时会返回null
。
更多关于 Generator::send()
函数的信息可以参考 PHP 官方文档:Generator::send()