Моя цель – показать генеалогическое дерево, начиная с 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
который только делает деревья?