手册说



PHP GC还不够吗?有人可以举例说明__destruct方法是必需的吗?

最佳答案

析构函数与释放内存没有直接关系-而是一个“钩子(Hook)”,允许在对象可以回收时运行自定义代码。也就是说,它与构造函数相反-构造函数不会分配内存(就像在调用构造函数之前由GC完成的那样),因此析构函数不会释放内存(因为GC会完成)然后)。

尽管GC可以很好地管理 native 资源(例如,其他对象和对象图),但外部资源(例如文件句柄)仍必须“手动处理”。例如,想象一个MyFile类,其中析构函数将确保文件(如果打开)将被关闭-虽然可以说它“更好”地要求在对象上调用Close/Dispose操作,但析构函数可以是在这种情况下用作后备机制。

我会反对在带有GC的语言中普遍使用析构函数。他们可能会引入许多细微的问题,例如明显的不确定性以及意外使对象保持事件的能力-即使在使用引用计数的PHP之类的语言中也是如此。 (Java/JVM和.NET模型使用的终结器更加挑剔。)

快乐的编码。

关于php - __destruct方法对于PHP是必需的吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7240230/

10-12 04:08
查看更多