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