【发布时间】:2014-05-11 17:32:23
【问题描述】:
在考虑没有引用循环的简单对象时,调用 __destruct 是否有一些保证?我从java中知道,它没有定义何时以及是否调用函数finalize,它取决于垃圾收集器。
例如,如果您有这样的功能:
1 function test(){
2 $x = new SomeObject();
3 $y = new SomeObject();
4 $x = null;
5 }
SomeObject 没有引用循环。
你能假设 $x->__destruct 在第 4 行被调用,$y->__destruct 在第 5 行被调用吗?
测试以下脚本似乎表明这是真的: https://gist.github.com/KAYLukas/0b1d65e57b52862f8da5
此外,SplFileObject 似乎适用于这个谓词:不可能关闭文件,而只需将变量设置为 null。如果这不会直接调用__destruct,那么在使用SplFileObject 打开文件后,就不可能可靠地打开文件。
我发现可以保证最终会调用__destruct,而不是何时。
【问题讨论】:
标签: php garbage-collection reference-counting