gpt4 book ai didi

php - 静态关键字在 PHP 生成器函数中不起作用

转载 作者:可可西里 更新时间:2023-10-31 23:17:07 26 4
gpt4 key购买 nike

似乎 static 关键字在生成器函数中不起作用?在 PHP 5.5 中:

function static_fn () {
static $p = 0;
echo "\nstatic_fn: p = " . $p . "\n" ;
$p++;
}
echo "calling static_fn()\n";
static_fn();
echo "calling static_fn()\n";
static_fn();

function static_gen() {
static $p = 0;
echo "\nstatic_gen: p = " . $p . "\n" ;
yield $p;
}

echo "calling static_gen()\n";
foreach(static_gen() as $stuff) {
echo $stuff . "\n";
}

echo "calling static_gen()\n";
foreach(static_gen() as $stuff) {
echo $stuff . "\n";
}

我得到了结果

calling static_fn()

static_fn: p = 0
calling static_fn()

static_fn: p = 1
calling static_gen()

static_gen: p = 0
0
calling static_gen()

static_gen: p = 0
0

也就是说,static 关键字对从连续调用返回 0 和 1 的 static_fn 函数成功起作用,但它对 static_gen< 不起作用 函数,它在每次调用中都被重新初始化为 0。

有谁知道为什么会这样,以及如何解决它以在生成器中复制静态变量?

最佳答案

试试这个:

function static_gen() {
static $p = 0; #initialised
while ($p < 10) { #yield while $p is smaller than 10
$p++; #increased
echo "\nstatic_gen: p = " . $p . "\n" ;
yield $p; #yield value
}
}

那会起作用的。

旁注:只要给定值,生成器函数就必须产生值。因此函数必须以一种或另一种方式提供它。

关于php - 静态关键字在 PHP 生成器函数中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38328929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com