родители, дети, рекурсивный список и структура метода

Моя цель – показать генеалогическое дерево, начиная с Person X и показывая всех потомков. Не нужно показывать братьев и сестер, родителей или других предков.

Для этого у меня есть класс person .

У меня также есть таблица базы данных с person_ID и parent_ID .

Когда класс person создается, вы передаете ему идентификатор желаемого лица, затем он предварительно загружает идентификаторы родителей и детей из этой таблицы.

Чтобы создать дерево потомков, я написал следующий метод внутри класса 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>'; } - 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 который только делает деревья?

Related of "родители, дети, рекурсивный список и структура метода"