【问题标题】:PHP garbage collector: assume specific order of destruction [closed]PHP垃圾收集器:假设特定的破坏顺序[关闭]
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 2011-05-27
    • 2021-09-10
    • 2016-04-03
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多