PHP函数变量和垃圾收集器


PHP function variables and the garbage collector

我想知道是否有人能回答我这个快速问题。我试着搜索它,但我得到了类似的问题,但在错误的上下文中。

我想知道的是接受这个代码:

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

函数结束后$test_array会发生什么。我知道它会失去范围,我对编程并不陌生。

我想知道的是我应该给打电话吗

unset($test_array);

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

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

感谢阅读Kevin

一旦$test_array不再在作用域中(并且没有指向它的其他引用),它就会被标记为垃圾收集。

当进程从函数返回到调用例程时,它停止在作用域中。

因此不需要unset

只有当您将$test_array声明为static时,情况才会有所不同。

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

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