for($i=0; $i<3; $i++) {
echo '$i = ' . $i . '<br/>' ;
}
echo 'out of loop, $i = ' . $i;
上面的输出:
$i = 0
$i = 1
$i = 2
out of loop, $i = 3
对我来说,即使在循环作用域之外显示$i,它仍然可见,这对我来说是没有意义的。为什么会发生这种情况(在java中,它是自动垃圾收集的)?
有没有办法让php在脱离循环作用域后自动进行垃圾回收?当我必须在每次循环后调用unset()
时,我的代码看起来很难看。
发布于 2011-02-03 17:05:23
这不是关于垃圾收集,而是关于范围。
在PHP中,for循环不会创建自己的作用域。$i
是在与循环相同的作用域中创建的,因此在循环结束后它仍然存在。它不会被垃圾回收,就像你在循环之前在行中声明的变量一样。
可以把它看作是一个特性,因为它经常被用作一个特性。例如,您不必在循环之前声明循环计数器,就可以知道在中断循环后它的值是什么。
如果您手动unset
变量,那么从PHP5.3开始,您可以使用gc_collect_cycles强制垃圾收集。
发布于 2011-02-03 17:21:12
如果使用递归函数替换循环,则应清除遗留的变量。
只要将循环放在另一个函数中,它应该在不同的作用域中,只需传入和传出数据即可。
https://stackoverflow.com/questions/4884059
复制相似问题