PHP函数变量和垃圾收集器

时间:2012-03-02 20:54:33

标签: php function unset

我想知道是否有人能回答我这个简短的问题。我尝试搜索它,但我得到了类似的问题,但是在错误的背景下。

我想知道的是这段代码:

function foo()
{
    $test_array = array();
    for($i=0; $i<10000000; $i++)
    {
        $test_array[] = $i;
    }
}

函数完成后$ test_array会发生什么。我知道它失去了范围,我不是编程的新手。

我想知道的是我应该致电

unset($test_array);

在函数结束之前,或者PHP在函数结束时将其设置为删除到垃圾收集器?

我使用for循环只是为了显示一个公平大小的变量来表达我的观点。

感谢阅读 凯文

2 个答案:

答案 0 :(得分:3)

一旦$ test_array不再在范围内(并且没有指向它的其他引用),它就会被标记为垃圾收集。当进程从函数返回到调用例程时,它不再在范围内。所以没有必要取消它。如果您将$ test_array声明为静态

,则只会有所不同

答案 1 :(得分:0)

unset()不释放变量使用的内存,它只是为垃圾收集器标记它,它将决定何时释放内存(当它有空闲的cpu周期或内存不足时,以先到者为准) )。

但是你必须意识到,当脚本完成时,PHP脚本使用的所有内存都会被释放,大多数情况下是以毫秒为单位,所以如果你没有做任何超出“正常”的冗长操作“PHP脚本的执行时间你不应该担心释放内存。