xda*_*azz 9 php garbage-collection destructor
手册说
一旦删除了对特定对象的所有引用,或者在关闭序列中显式销毁对象或以任何顺序,就会调用析构函数方法.
PHP GC不够用吗?有人可以举例说__destruct方法是必要的吗?
小智 26
一个析构函数没有什么直接做与释放内存-取而代之的则是一个"钩",允许当对象是符合回收来运行自定义代码.也就是说,它与构造函数相反 - 构造函数不分配内存(因为在调用构造函数之前由GC完成)因此析构函数不会释放内存(因为这将由GC完成)然后).
虽然GC可以很好地管理本机资源(例如其他对象和对象图),但是文件句柄等外部资源仍然必须"手动处理".例如,假设一个MyFile类,析构函数将确保文件(如果打开)将被关闭 - 虽然可以说"更好"使它成为对对象调用Close/Dispose操作的要求,析构函数可以是在这种情况下用作后退机制.
我会反对使用GC语言中的析构函数的一般用法.他们可以引入一些微妙的问题,例如明显的非确定性和意外保持对象存活的能力 - 即使在使用引用计数的PHP等语言中也是如此.(Java/JVM和.NET模型使用的终结器更加挑剔.)
快乐的编码.