我正在使用 SplObjectStorage 来保存有关托管对象的信息。当我的对象被破坏时,我希望 SplObjectStorage 自动清理不再有外部引用的对象。

我现在只能看到两个选项:

  • 使托管对象的析构函数通知存储删除对它的引用;这是 Not Acceptable ,因为这些对象不应该知道管理器;
  • 解析 debug_zval_dump() 得到引用计数;也 Not Acceptable ,恕我直言,对于严肃的应用程序来说太“hacky”了。

  • 还有其他想法吗?

    最佳答案

    您可以尝试使用事件来实现所需的功能。每个托管对象在销毁时生成一个事件,并且对象管理器订阅此事件,因此它将能够从 SplObjectStorage 中删除对对象的引用。

    关于PHP5 : SplObjectStorage garbage collection,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6332408/

    10-09 01:37