$foo = new B($this);
Код такой, к сожалению, не соответствует моим потребностям. Есть ли другой способ доступа к свойствам родительского объекта?
Я постараюсь объяснить, почему. Мы пишем игровое программное обеспечение, и некоторые классы имеют очень «необычные» зависимости и по-разному влияют друг на друга. Вот почему код иногда становится почти не поддерживаемым без ссылок на родителей в каждом случае (иногда даже на нескольких родителей из разных контекстов, т. Е. Отряд может принадлежать к битве, к пользователю и т. Д.).
А теперь причина, по которой ссылки меня не удовлетворяют. Когда я генерирую вывод для клиентской стороны, я использую своего рода сериализацию объектов в XML. Он работает очень хорошо, пока не встретит рекурсивные ссылки, такие как ссылки на родителей. Я могу сделать их защищенными, но тогда они теряют свое использование, т. Е. (Фиктивный пример)
$this->squad->battle->getTeam($tid)->getSquad($sqid)->damageCreature(...);
Другой способ - реализовать метод сериализации в каждом сериализуемом классе и вызвать его внутри сериализатора следующим образом:
$obj->toXML($node);
$this->appendChild($node);
но это много чего можно написать и поддержать! И иногда я динамически генерирую объекты для сериализатора (меньше трафика).
Я даже думаю о взломе: «научить» сериализатор игнорировать некоторые свойства в определенных классах)). Да ... плохая идея ...
Это долгая дискуссия, но поверьте мне, что Registry и Observer не подходят. Есть еще идеи?