PHP的gc_enable功能究竟是做什么的?

2022-08-30 23:22:08

在您告诉我阅读手册之前,请查看此功能的 php.net 文档

警告
此功能当前未记录。只有其参数列表可用。

这很有帮助!

本页说明它为循环引用启用了垃圾回收。这在何时何地有用?有人可以给我看一个使用它的例子吗?优选创建循环引用然后收集的示例。


答案 1

gc_enable仅当您调用 时才需要。这样做确实没有合理的理由,因为这会导致循环引用不被垃圾回收(就像5.3之前,循环GC不存在一样)。gc_disable

PHP的垃圾回收器通过引用计数工作。您可以将变量视为指向对象的“指针”。当一个对象没有指向它的指针时,它是“死的”,因为没有任何东西可以到达它,所以它被垃圾回收。

//one thing points to the Foo object
$a = new Foo();

//now two things do
$b = $a;

//now only $b points to it
$a = null;

//now nothing points to Foo, so php garbage collects the object
$b = null;

不过,请考虑以下情况:

$a = new Foo();
$b = new Bar();
$b->foo = $a;
$a->bar = $b;

$a = $b = null;

在这一点上,除了物体本身之外,没有任何东西$a或$b。这是一个循环引用,在以前版本的php(<5.3)中,不会被收集。5.3 中的循环收集器现在可以检测到这一点并清理这些对象。


答案 2

PHP手册中有一整章关于垃圾回收对此进行了解释:

我通常尝试不只是异地链接,但觉得总结起来太多了。


推荐