垃圾回收在PHP中是如何工作的?也就是说,如何清理局部函数变量


How does garbage collection work in PHP? Namely, how do local function variables get cleaned up?

如果我给一个变量赋值,而这个变量在函数中没有被声明为全局的,那么这个变量在函数结束时是否会自动取消设置,或者只有在PHP脚本执行结束时才会取消设置?

我试图确定是否它是更聪明的取消设置临时,函数范围内的变量手动或不用担心,因为他们会被PHP引擎自动取消设置。

当函数退出时,该变量将被取消设置,除非它有外部引用来保持它的"活动"。变量所占用的实际内存是否被释放完全取决于垃圾收集器。GC是一个昂贵的操作,PHP只会在需要的时候调用它(比如内存越来越紧)。

这完全取决于函数的作用域。理论上,您可以让整个脚本在一个函数范围内运行(希望是调用其他函数,但仍然…)。

对于一个大小合理且副作用最小的函数,保持对象的设置是完全可以的——它们的析构函数将在函数完成后被调用(这是unset的第二个效果),并且它们将在函数完成后的第一个清理周期中被清理。对于涉及在大量对象上创建的较大函数,则最好手动删除这些对象。

Zend Engine将为您做清理工作,根据需要减少引用计数