Re: Re: Almost Recursion

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Philip Graham wrote:
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.


thanks for the suggestion, didn't fix but it was a nice idea - managed to figure it out - in short simply made a class Information which TownInformation extends, changed TownInformationCollection to InformationCollection - then all setters tool in Information or InformationCollection none of which had getTown method - so the instances now have the recursion (which is needed) but the class structure does not so the serializer works :) *joy*

<?php

interface Identifiable {

  public function getId();

  public function setId($id);

}

interface Informative {

  public function getInformation();

  public function setInformation($information);

}

abstract class Identifier implements Identifiable {

	private $id;

  public function getId() {
    return $this->id;
  }

  public function setId($id) {
    $this->id = $id;
  }

}

class Information extends Identifier implements Informative {

  private $information;

  public function getInformation() {
    return $this->information;
  }

  public function setInformation($information) {
    return $this->information = $information;
  }

}

class Town extends Identifier {

  private $townInformationCollection;

  public function getTownInformationCollection() {
    return $this->townInformationCollection;
  }

  public function setTownInformationCollection(
  InformationCollection $townInformationCollection) {
    $this->townInformationCollection = $townInformationCollection;
  }

}

class InformationCollection {

  private $informationArray = array();

  public function getInformationArray() {
    return $this->informationArray;
  }

  public function setInformationArray(array $informationArray) {
    $this->informationArray = array();
    foreach($informationArray as $information) {
    	$this->addInformation($information);
    }
  }

  public function addInformation(Information $information) {
    $this->informationArray[] = $information;
  }

}

class TownInformation extends Information {

  private $town;

  public function getTown() {
    return $this->town;
  }

  public function setTown(Town $town) {
    $this->town = $town;
  }

}

$town = new Town();
$town->setId(1);

$townInformation = new TownInformation();
$townInformation->setId(12);
$townInformation->setInformation('some random info');
$townInformation->setTown($town);

$townInformationCollection = new InformationCollection();
$townInformationCollection->setInformationArray( array($townInformation) );

$town->setTownInformationCollection($townInformationCollection);

print_r( $town );
print_r( $townInformation );
?>

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux