首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么PHP在离开循环后不清除内存?

为什么PHP在离开循环后不清除内存?
EN

Stack Overflow用户
提问于 2011-02-03 17:01:03
回答 2查看 11.7K关注 0票数 17
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()时,我的代码看起来很难看。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-03 17:05:23

这不是关于垃圾收集,而是关于范围。

在PHP中,for循环不会创建自己的作用域。$i是在与循环相同的作用域中创建的,因此在循环结束后它仍然存在。它不会被垃圾回收,就像你在循环之前在行中声明的变量一样。

可以把它看作是一个特性,因为它经常被用作一个特性。例如,您不必在循环之前声明循环计数器,就可以知道在中断循环后它的值是什么。

如果您手动unset变量,那么从PHP5.3开始,您可以使用gc_collect_cycles强制垃圾收集。

票数 42
EN

Stack Overflow用户

发布于 2011-02-03 17:21:12

如果使用递归函数替换循环,则应清除遗留的变量。

只要将循环放在另一个函数中,它应该在不同的作用域中,只需传入和传出数据即可。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4884059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档