PHP函数变量和垃圾收集器

PHP函数变量和垃圾收集器,php,function,unset,Php,Function,Unset,我想知道是否有人能回答我这个简短的问题。我试图搜索它,但我得到了类似的问题,但在错误的背景下 我想知道的是这个代码: function foo() { $test_array = array(); for($i=0; $i<10000000; $i++) { $test_array[] = $i; } } 在函数结束之前,还是PHP将其设置为在函数结束时将其删除到垃圾收集器 我使用for循环只是为了显示一个大小合适的变量,以便理解我的观点

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

我想知道的是这个代码:

function foo()
{
    $test_array = array();
    for($i=0; $i<10000000; $i++)
    {
        $test_array[] = $i;
    }
}
在函数结束之前,还是PHP将其设置为在函数结束时将其删除到垃圾收集器

我使用for循环只是为了显示一个大小合适的变量,以便理解我的观点

谢谢你的阅读
Kevin

一旦
$test\u array
不再在范围内(并且没有指向它的其他引用),它将被标记为垃圾收集

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

因此,无需
取消设置它

如果将
$test_array
声明为
static

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


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

在我自己的测试中,使用
memory\u get\u usage()
(可能非常特定于平台,所以请谨慎对待)——显式取消设置变量似乎可以立即释放内存。让变量滑出范围肯定会将变量标记为可收集,但不一定会触发收集器本身。unset()不删除,它只标记删除。。。垃圾收集不是由unset()或返回调用例程触发的。正如程序员所说,当CPU有空闲周期时,或者当PHP试图分配额外的内存而内存不足时,就会发生这种情况。据我所知,unset不调用垃圾收集器。我知道在脚本执行后内存会被释放,但当涉及到干净的托管代码时,我有点不懂。
unset($test_array);