栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在PHP中yield是什么意思?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在PHP中yield是什么意思?

什么
yield

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 5.5中
引入。尝试使用

yield
该版本之前的版本会导致各种解析错误,具体取决于关键字后面的代码。因此,如果您从该代码中遇到了解析错误,请更新您的PHP。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/375634.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号