【发布时间】:2021-02-11 12:31:49
【问题描述】:
我一直在查看 PHP 中的 some examples 和 yield,试图了解人们会在什么情况下使用它,我开始注意到我查看的所有示例都有yield 在 for(...) {} 或 foreach(...) {} 语句中。
有没有办法在for 之外使用yield?
【问题讨论】:
我一直在查看 PHP 中的 some examples 和 yield,试图了解人们会在什么情况下使用它,我开始注意到我查看的所有示例都有yield 在 for(...) {} 或 foreach(...) {} 语句中。
有没有办法在for 之外使用yield?
【问题讨论】:
它不需要循环。这有效:
function foo() {
yield 1;
yield 2;
yield 3;
}
使用它的一个原因是将其用作与 Javascript 中的“等待”类似的功能。
例如,可以为此目的构建一个使用 yield 的异步框架:
function foo() {
$response = yield asyncHttpRequest('GET', 'http://blabla');
}
这个具体的例子是虚构的,但它是可能的(并且已经完成)。
我做了这样一个异步库。文档在这里:https://sabre.io/event/coroutines/
虽然有更好的维护/更流行的库。
【讨论】:
yield 的输出。它只是在个案基础上吗?比如,你可以使用for、foreach,你展示的命令式版本和异步风格?
yield没有直观的理解。作为比较,我通常知道变量是什么,以及它在 PHP 语法中的位置。有它可以归属和工作的“地方”。我要说的是我不明白yield可以去的“地方”。我在我的问题中列出了两个,你又给我看了两个,但我不明白为什么yield 可以去那里的基本逻辑......这有意义吗?也许这个问题对 SO 来说太宽泛了
yield 更普遍地是一种暂停功能并稍后再次恢复的机制。