【问题标题】:PHP yield without for?没有for的PHP收益?
【发布时间】:2021-02-11 12:31:49
【问题描述】:

我一直在查看 PHP 中的 some examplesyield,试图了解人们会在什么情况下使用它,我开始注意到我查看的所有示例都有yieldfor(...) {}foreach(...) {} 语句中。

有没有办法在for 之外使用yield

【问题讨论】:

    标签: php generator


    【解决方案1】:

    它不需要循环。这有效:

    function foo() {
       yield 1;
       yield 2;
       yield 3;
    } 
    

    使用它的一个原因是将其用作与 Javascript 中的“等待”类似的功能。

    例如,可以为此目的构建一个使用 yield 的异步框架:

    function foo() {
       $response = yield asyncHttpRequest('GET', 'http://blabla');
    }
    

    这个具体的例子是虚构的,但它是可能的(并且已经完成)。

    我做了这样一个异步库。文档在这里:https://sabre.io/event/coroutines/

    虽然有更好的维护/更流行的库。

    【讨论】:

    • 这很有帮助,但我觉得我仍然不明白我可以使用什么语法来生成yield 的输出。它只是在个案基础上吗?比如,你可以使用forforeach,你展示的命令式版本和异步风格?
    • 我不完全理解这个问题。您是否正在寻找使用 yield 的理由?或者您是否有一个真正的用例并希望 yield 可以帮助解决这个问题?
    • 我没有真正的用例——我的意思是,我觉得我对yield没有直观的理解。作为比较,我通常知道变量是什么,以及它在 PHP 语法中的位置。有它可以归属和工作的“地方”。我要说的是我不明白yield可以去的“地方”。我在我的问题中列出了两个,你又给我看了两个,但我不明白为什么yield 可以去那里的基本逻辑......这有意义吗?也许这个问题对 SO 来说太宽泛了
    • 可能太宽泛了。 yield 更普遍地是一种暂停功能并稍后再次恢复的机制。
    • 是的,就是这样 =)
    猜你喜欢
    • 1970-01-01
    • 2011-01-28
    • 2019-09-19
    • 1970-01-01
    • 2013-07-03
    • 2023-03-29
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    相关资源
    最近更新 更多