基于问题this answer的'Prevent destructor from being called manually'我想知道依靠垃圾收集器以预期的顺序破坏对象private $delegate
是否有危险。
PHP Manual regarding Destructor说:
只要没有对特定对象的其他引用,或者在关闭序列期间以任何顺序,就会调用析构函数方法。
确定。因此,如果对象以某种方式存在直到关闭序列,就会出现问题。
假设我们确保对象在关闭序列之前不会存在,因此“只要没有其他引用”就会被破坏。目前这意味着,一旦Test
的实例被破坏,其属性$delegate
也将随后被破坏。
但是如果在将来的PHP版本中垃圾收集器变得更聪明并以某种方式“检测”Test
的实例没有使用其属性$delegate
并在Test
时破坏它还活着?那将是不幸的。
简而言之:最后一段是一个可以想象的场景,或者一个对象'A'被注册为对象'B'的属性总是会在'B'被破坏后被破坏(假设我们'不在关机序列中)?
答案 0 :(得分:1)
没有理由相信PHP会有垃圾收集器而不是当前的引用计数机制。
即使有,只要活动对象持有指向“委托”对象的指针,垃圾收集器就不能删除委托对象,所以不用担心,你是安全的。