Если все, что вам нужно, это проверить, добавлен ли тот же объект, вы можете использовать: if ($element === $this)
.
Формальная документация здесь: http://php.net/manual/en/language.oop5.object-comparison.php
Но вы также должны рассмотреть случай, который в цикле вызывается несколькими уровнями (например, root добавлен в leaf, например).Этого следует избегать из-за того, что определение дерева является графом без кружков ...
Чтобы убедиться, что я добавлю имя функции exist($elementToFind)
в класс дерева со следующим алгоритмом:
- Если
$elementToFind === $this
вернуть true. - foreach
$this->elements
: если $element->exist($elememtToFind)
вернуть true.
Теперь все, что вам нужно, это вызвать *Метод 1021 * в начале функции addElement
и, если она возвращает true, выдает ошибку.
Обратите внимание, что это не решит проблему добавления дерева b с листом a к дереву a - так что вы можетеотметьте также все elements
под новым элементом, который вы хотите добавить.Вы можете сделать это, добавив 3 шага:
Foreach
$elementToFind->$elememts as $elem
: если
$elem->exist($this)
верно -> вернуть true