PHP引擎会在脚本执行完成后进行垃圾回收,那么是否还需要destruct呢?在stackoverflow上看到的一个很好的答复:
析构函数本身跟内存释放没有任何直接的关系,它只是当一个对象被回收时执行自定义代码的“钩子”。它的作用跟构造函数刚好相反-构造函数本身也不申请内存(内存的申请和释放都是GC的事)。
GC能够很好的管理PHP原生的资源(比如对象),但是对于外部资源却必须手动处理。比如,一个文件管理的类,析构函数的作用就是保证如果文件被打开了,就应该被关闭。虽然“最好”在一个对象上要求去调用一个关闭或处理操作,这时析构函数就作为一种援助机制。
我本身反对将析构函数与GC一起使用。有许多微妙的问题他们可以引入如明显的非确定性和意外的能力保持对象存活——甚至在像PHP这种使用引用计数的语言里面。(Java/JVM和.net使用终结器更为挑剔。)