在 PHP 7.4 中,当循环引用对象中有方法时,我注意到gc_collect_cycles返回的收集循环数始终为零。destructor
class A {
public function __destruct() {
}
}
gc_disable();
$a1 = new A;
$a2 = new A;
$a1->ref = $a2;
$a2->ref = $a1;
$a1 = $a2 = NULL;
echo('removed cycles: '.gc_collect_cycles()); // Output: removed cycles: 0
当我删除该__destruct
方法时,输出为:
removed cycles: 2
您可以看到这种行为从 PHP 7.4.0beta4开始
这里发生了什么 ?即使禁用了 GC,是否会在析构函数中收集垃圾循环?