【发布时间】:2016-07-12 12:29:09
【问题描述】:
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 关键字在 static_fn 函数中成功运行,该函数从连续调用中返回 0 和 1,但它不适用于在每次调用中重新初始化为 0 的 static_gen 函数。
有谁知道为什么会这样,以及如何解决它以在生成器中复制静态变量?
【问题讨论】:
-
static $p对于每个函数都是唯一的,请记住这一点! -
你最好使用全局变量或将你的函数包装到类中
-
where it was reinitialised to 0 in each call但你也没有对static_gen中的变量做任何事情!你期待什么? -
哈哈,我真是个白痴。你当然是对的。这是一个绝对可耻的错误,错过了。你想发布这个问题的答案,以便我标记你是正确的。
标签: php function static generator