Ste*_*hen 14 php garbage-collection function
在您告诉我阅读本手册之前,请查看php.net文档以获取此功能:
警告
此功能目前未记录; 只有它的参数列表可用.
那很有帮助!
该页面解释了它为循环引用启用了垃圾收集.这在何时何地有用?有人能告诉我一个使用它的例子吗?优选地,创建然后收集循环引用的示例.
rye*_*guy 15
gc_enable只有你打电话才需要gc_disable.实际上没有合理的理由这样做,因为这会导致循环引用不被垃圾收集(如5.3之前,当循环GC不存在时).
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;
Run Code Online (Sandbox Code Playgroud)
考虑一下这个:
$a = new Foo();
$b = new Bar();
$b->foo = $a;
$a->bar = $b;
$a = $b = null;
Run Code Online (Sandbox Code Playgroud)
此时,除了对象本身之外,没有任何东西可以保留$ a或$ b.这是一个循环引用,并且在以前版本的php(<5.3)中,将不会收集.5.3中的循环收集器现在可以检测到这个并清理这些对象.