On January 16, 2009 14:45:13 Nathan Rixham wrote: > Nathan Rixham wrote: > > Here's a little recursion problem I'd like some input on - the task, to > > remove recursion from this little set of 3 classes, without removing any > > functionality. > > to be very specific; the problem is caused by a serializer (which cannot > change); now this serializer calls the get methods automatically, that > is where it's running in to the recursion; the serializer knows what get > methods to call by the class type in the setter. (a work around for php > not supporting strong type setting on properties/attributes) Don't have time to work out a full solution but I'd try starting by storing the town's Id in the TownInformation class instead of the reference to the Town object. Then implement a TownPool that gets populated when a Town's id is set. class TownPool { private static $_pool = array(); public static addTown($id, Town $town) { if(self::$_pool[$id] !== null) { // Do something here, throw an exception maybe } self::$_pool[$id] = $town; } public static getTown($id) { return self::$_pool[$id]; } } class Town { // ..... public function setId($id) { $this->id = $id; TownPool::addTown($id, $this); } } class TownInformation { // Instead of $town; private $townId; public function setTown(Town $town) { $this->townId = $town->getId(); } public function getTown() { return TownPool::getTown($this->townId); } } As an added benefit the TownPool could also make sure that no two Town objects have the same id. You will have to make sure that a Town actually has an id in the TownInformation class before trying to add it to the pool. -- Philip Graham Lightbox Technologies www.lightbox.ca -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php