我的目标是显示从X 人开始并显示所有后代的家谱。无需显示兄弟姐妹、父母或其他祖先。
为此我有一person
堂课。
我还有一个带有person_ID
和parent_ID
列的数据库表。
创建person
类时,您将所需的人员 ID 传递给它,然后它将从该表中预加载其父 ID 和子 ID。
为了创建后代树,我在person
类中编写了以下方法:
public function loadChildren() {
foreach ($this->_ChildIDs as $curChildID) {
$child = new Person();
$child->loadSelfFromID($curChildID);
$child->loadChildren();
$this->_Children[] = $child;
}
}
这成功地递归地加载了整个后代树。
到现在为止还挺好。
为了将此数据显示为嵌套的 HTML 列表,我编写了以下独立函数:
function recursivePrint($array) {
echo '<ul>';
foreach ($array as $child) {
echo '<li>'.$child->getName();
recursivePrint($child->getChildren());
echo '</li>';
}
echo '</ul>';
}
最终脚本如下所示:
$c = new Person();
$c->loadSelfFromID('1');
$c->loadChildren(); // recursively loads all descendants
$descendants = $c->getChildren();
recursivePrint($descendants);
//Output is as expected.
我的问题是:我在哪里坚持那个独立的功能?
它是否只是被扔进了一个随机实用程序,包括那些实际上并没有去其他任何地方的功能?它应该进入person
课堂吗?它应该进入一个FamilyTree
只制作树的类吗?