【发布时间】:2010-09-30 20:58:02
【问题描述】:
我有一个复杂的嵌套对象层次结构,所有子对象(存储在父类中的对象数组)都包含一个链接回其父对象的属性:相当简单明了,没有真正的问题。如果我对层次结构中的任何对象执行 var_dump,我将在转储中获得递归引用,正如我所期望的那样。
FIRSTGEN
_children array of objects of type SECONDGEN
SECONDGEN #1
_parent object of type FIRSTGEN
_children array of objects of type THIRDGEN
THIRDGEN #1
_parent object of type SECONDGEN
THIRDGEN #2
_parent object of type SECONDGEN
SECONDGEN #2
_parent object of type FIRSTGEN
_children array of objects of type THIRDGEN
THIRDGEN #3
_parent object of type SECONDGEN
我最近在该层次结构中添加了一些新元素,但它们并不遵循完全相同的模式。它们存储在顶级父对象的一个对象数组中,但包含一个将它们链接回的属性,而不是它们的父对象,而是兄弟对象。当我现在执行 var_dump 时,我收到“致命错误:嵌套级别太深 - 递归依赖?”。
FIRSTGEN
_children_1 array of objects of type SECONDGEN_1
SECONDGEN_1 #1
_parent object of type FIRSTGEN
_children array of objects of type THIRDGEN
THIRDGEN #1
_parent object of type SECONDGEN_1
THIRDGEN #2
_parent object of type SECONDGEN_1
SECONDGEN_1 #2
_parent object of type FIRSTGEN
_children array of objects of type THIRDGEN
THIRDGEN #3
_parent object of type SECONDGEN_1
_children_2 array of objects of type SECONDGEN_2
SECONDGEN_2 #1
_parent object of type SECONDGEN_1
除了 var_dump() 之外,代码中的其他所有内容都可以正常工作。我尝试创建一个更简单的示例来演示该问题,以便在提出这个问题时可以提供一个示例;但无法在简短的测试中复制它,只能在我更复杂的代码中。
我知道解决方案是重构关系,以便我的 SECONDGEN_2 对象的 _children_2 数组保存在适当的 SECONDGEN_1 父级中,使父级关系“正确”...我已经开始这样做了。 但是,我对这个错误很感兴趣,想知道是否有其他人遇到过它(以及你自己是如何处理的)。
【问题讨论】:
-
一些代码会有所帮助,但如果我猜的话,我会说你有无限递归(因为我是我兄弟的兄弟)
-
我希望我可以用一个简单的 sn-p 代码来复制可以在这里发布的代码,但到目前为止我还没有设法在 40 行或更少的时间内复制(我仍在尝试制作某物);甚至从我的主要项目中剥离所有无关的东西(当我可以重现它时)它仍然有太多的 100 行来发布。
标签: php oop recursion hierarchical-data