在PHP中yield是什么意思?
我最近偶然发现了以下代码:
function xrange($min, $max) {
for ($i = $min; $i <= $max; $i++) {
yield $i;
}
}
我以前从未看过这个yield
关键字。尝试运行我得到的代码
解析错误:语法错误,第x行上出现意外的T_VARIABLE
那么这个yield
关键字是什么呢?它甚至是有效的PHP吗?如果是,该如何使用?
回答:
回答:
该yield
关键字从发电机函数返回数据:
生成器函数的核心是yield关键字。以最简单的形式,yield语句看起来很像return语句,除了yield而不是停止函数的执行并返回,而是为循环生成器的代码提供一个值,并暂停生成器函数的执行。
回答:
生成器函数实际上是编写迭代器的一种更紧凑,更有效的方法。它允许您定义一个函数(您的xrange
),该函数将
在 您遍历该函数时_计算并返回_ 值:
foreach (xrange(1, 10) as $key => $value) { echo "$key => $value", PHP_EOL;
}
这将创建以下输出:
0 => 11 => 2
…
9 => 10
您也可以控制$key
在foreach
使用
yield $someKey => $someValue;
在generator函数中,$someKey
是您想要显示的内容$key
并$someValue
是中的值$val
。在问题的示例中为$i
。
回答:
现在您可能想知道为什么我们不仅仅使用PHP的本机range
函数来实现该输出。是的,你是。输出将是相同的。区别在于我们到达那里的方式。
当我们使用range
PHP,将执行它,在内存中创建一个数字的整个阵列,并return
认为 整个阵列
的foreach
循环,然后将去在它和输出的值。换句话说,foreach
will将对数组本身进行操作。该range
功能和foreach
唯一的“交谈”一次。可以将其想像为通过邮件获取包裹。送货员会把包裹交给您,然后离开。然后解开整个包装,取出里面的任何东西。
当我们使用生成器函数时,PHP将逐步进入该函数并执行,直到遇到结尾或yield
关键字为止。当遇到a时yield
,它将把当时的值返回外循环。然后,它返回到生成器函数,并从产生的地方继续。由于您xrange
拥有一个for
循环,它将执行并屈服直到$max
达到。想像它foreach
和发生器打乒乓球。
回答:
显然,生成器可用于解决内存限制。根据您的环境,执行range(1,
1000000)遗嘱会使您的脚本致命,而对生成器执行同样的操作会很好。或如Wikipedia所述:
由于生成器仅根据需要计算其屈服值,因此它们对于表示昂贵或无法立即计算的序列很有用。这些包括例如无限序列和实时数据流。
发电机也应该很快。但是请记住,当我们谈论快速时,我们通常会以很小的数目交谈。因此,在您开始运行并更改所有代码以使用生成器之前,请进行基准测试以了解在何处有意义。
生成器的另一个用例是异步协程。该yield
关键字不仅返回值,但它也接受他们。有关此内容的详细信息,请参见下面链接的两个出色的博客文章。
回答:
生成器已在
引入。尝试使用yield
该版本之前的版本会导致各种解析错误,具体取决于关键字后面的代码。因此,如果您从该代码中遇到了解析错误,请更新您的PHP。
以上是 在PHP中yield是什么意思? 的全部内容, 来源链接: utcz.com/qa/412404.html