php yield 在当前场景下的使用区别是什么?

<?php
function test1($id)
{
    yield idIsValid($id);
    // idIsValid($id);
    yield 666;
}

function idIsValid($id)
{
    if ($id <= 1) {
        throw new Exception('id不对');
    }
}

// $value = 1;
$value = 0;
$ids = test1($value);
foreach ($ids as $id) {
    echo $id;
}

在第四行和第五行:

yield idIsValid($id);
// idIsValid($id);

两种方式如何写,返回的结果都是一样的,请问两者的区别是什么?

阅读 7.4k
3 个回答

你这是乱用 yield 。yield 本质是可中断函数。

yield idIsValid($id);

// 等于
idIsValid($id);
yield null;

你拿它做这种判断,多中断了一次,yield 很委屈...

简单说:数据来源非常大,一次载入会占用过多内存的时候,就选择 yield

如果数据量很小,就一次全部载入内存。

参考这里 http://php.net/manual/zh/lang...

生成器函数的核心是yield关键字。它最简单的调用形式看起来像一个return申明,不同之处在于普通return会返回值并终止函数的执行,而yield会返回一个值给循环调用此生成器的代码并且只是暂停执行生成器函数。

就是不中断函数 保持值的传递

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题