【发布时间】:2014-01-19 17:55:27
【问题描述】:
基于this answer 到问题'Prevent destructor from being called manually',我想知道依靠垃圾收集器按预期顺序销毁对象private $delegate 是否危险。
PHP Manual regarding Destructor 说:
一旦没有对特定对象的其他引用,或在关闭序列期间以任何顺序调用,将立即调用析构函数。
好的。因此,如果对象以某种方式存活到关闭序列,就会出现问题。
假设我们确保对象在关闭序列之前不会存活,因此“一旦没有其他引用”就将其销毁。目前这意味着,一旦Test 的实例被破坏,其属性$delegate 也将随后被破坏。
但是,如果在未来的 PHP 版本中垃圾收集器变得更智能,并且以某种方式“检测”到 Test 的实例没有使用其属性 $delegate 并在 Test 仍然存在时将其销毁,该怎么办?那将是不幸的。
简而言之:最后一段是否是一个可以想象的场景,或者注册为对象“B”的属性的对象“A”是否总是会在“B”被破坏后被破坏(假设我们'不在关机序列中)?
【问题讨论】:
-
所以您的问题是基于假设
smarter表示more stupid的“假设”未来情况? -
no other references似乎相当清楚地暗示其意图是它不会改变。如果措辞是no other _active_ references或任何其他“将来可以用另一种含义阅读”的话,我会更加小心。 -
这个问题似乎是题外话,因为它是基于投机小说
-
@MarkBaker 是的,我也很怀疑。有没有更适合这类问题的 StackExchange 网站?
-
我猜Programmers 会是这个问题的更好站点。我的错。
标签: php garbage-collection destructor