English | 简体中文 | 繁體中文
查询

Generator::send()函数—用法及示例

「 向生成器发送一个值,并返回生成器的下一个值 」


函数名: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()

补充纠错
上一个函数: Generator::throw()函数
下一个函数: Generator::rewind()函数
热门PHP函数
分享链接