PHP垃圾收集器:假定特定的销毁顺序

时间:2014-01-02 09:58:55

标签: php garbage-collection destructor

基于问题this answer'Prevent destructor from being called manually'我想知道依靠垃圾收集器以预期的顺序破坏对象private $delegate是否有危险。

PHP Manual regarding Destructor说:

  

只要没有对特定对象的其他引用,或者在关闭序列期间以任何顺序,就会调用析构函数方法。

确定。因此,如果对象以某种方式存在直到关闭序列,就会出现问题

假设我们确保对象在关闭序列之前不会存在,因此“只要没有其他引用”就会被破坏。目前这意味着,一旦Test的实例被破坏,其属性$delegate也将随后被破坏。

但是如果在将来的PHP版本中垃圾收集器变得更聪明并以某种方式“检测”Test的实例没有使用其属性$delegate并在Test时破坏它还活着?那将是不幸的。

简而言之:最后一段是一个可以想象的场景,或者一个对象'A'被注册为对象'B'的属性总是会在'B'被破坏后被破坏(假设我们'不在关机序列中)?

1 个答案:

答案 0 :(得分:1)

没有理由相信PHP会有垃圾收集器而不是当前的引用计数机制。

即使有,只要活动对象持有指向“委托”对象的指针,垃圾收集器就不能删除委托对象,所以不用担心,你是安全的。