我想知道是否有人知道 PHP 的匿名函数是否有资格进行垃圾收集?
我知道使用创建的函数create_function
不会被垃圾收集,但我无法找到有关使用function(){}
语法创建的函数的任何参考(内部表示为闭包对象)。
我想知道是否有人知道 PHP 的匿名函数是否有资格进行垃圾收集?
我知道使用创建的函数create_function
不会被垃圾收集,但我无法找到有关使用function(){}
语法创建的函数的任何参考(内部表示为闭包对象)。
PHP 的垃圾收集器不区分“事物”的类型——如果它在某处至少有一个引用,它就会被保留。在这不适用的那一刻,资源被垃圾收集。
这与using 不同create_function
,因为 PHP 除了引用它之外,还会在全局范围内抛出 create_function 引用。一个闭包(一个闭包对象,如果你愿意的话,因为它们就是这样!)只存在于它创建的范围内+你传递给它的所有范围内。
如果你想说服自己,运行这段代码:
<?php
$r = memory_get_usage();
for ($i = 0; $i < 100; $i++) {
$k = function() {echo "boo"; };
if (memory_get_usage() > $r) {
echo "Different memory count. Off by: ".(memory_get_usage() -$r);
}
$r = memory_get_usage();
}
你会得到一个回声。用 create_function替换$k
赋值,你会得到 100。
你可以通过 xdebug_debug_zval( 'a' ); 看到 如果安装了 xdebug。http://www.php.net/manual/en/features.gc.refcounting-basics.php