| 
<?php
 // Turn on all errors for debuggin purposes
 error_reporting(E_ALL);
 
 require_once('../library/Util/ClassGenerator.php');
 
 /**
 * A singleton class: The Family
 */
 Class Family {
 
 /**
 * The one and only instance will be kept here
 * @var Family
 */
 protected static $instance = null;
 
 /**
 * Mother
 * Used by the generator!
 * @var Mother
 */
 protected $Mother = null;
 
 /**
 * Father
 * @var Mother
 */
 protected $Father = null;
 
 /**
 * Protected constructor
 */
 protected function __construct(){
 // How to create a family ?
 }
 
 /**
 * Return the one an onyl family
 * Used by the generator!
 * @return Family
 */
 public static function & getInstance(){
 if (empty(self::$instance))
 self::$instance= new Family();
 return self::$instance;
 }
 
 /**
 * Set father with this public method.
 * Used by the generator!
 * @param Father $Father
 */
 public function setFather($Father){
 $this->Father = $Father;
 }
 
 /**
 * Get "father" object
 * @return Father
 */
 public function getFather(){
 return $this->Father;
 }
 
 /**
 * Get "mother" object
 * return Mother
 */
 public function getMother(){
 return $this->Mother;
 }
 }
 
 /**
 * Used by the generator to create the missing class "Child"
 */
 Class HumanBeeing {
 
 protected $name = '<DefaultValue>';
 
 protected $children = array();
 
 /**
 * Used by the generator!
 */
 protected $inCome = 0.0;
 
 /**
 * Used by the generator!
 */
 protected $sex = '?';
 
 /**
 * Set the name of a human beeing
 * Used by the generator!
 * @param string $name
 */
 public function setName( $name){
 $this->name = $name;
 }
 
 /**
 * Return the name
 * @return string
 */
 public function getName( $name){
 return $this->name;
 }
 
 /**
 * Add a new child to this human beeing
 * Used by the generator!
 */
 public function addChild(Child $child){
 $this->children[] = $child;
 }
 }
 
 Class Mother extends HumanBeeing{
 protected $sex = 'female';
 }
 
 Class Father  extends HumanBeeing{
 protected $sex = 'male';
 }
 
 /**
 * Define the family as XML, where the mother brings in the children
 */
 
 $XMLFamily = <<<XMLString
 <?xml version="1.0" standalone="yes" ?>
 <Family xmlns:cgen="http://www.example.com/namespaces#ClassGenerator" cgen:factMethod="getInstance" >
 <Mother name="Heidelinde"  inCome="2501.0" >
 <Child cgen:extends="HumanBeeing" name="Anna" sex="female"/>
 <Child name="Lena" sex="female"/>
 </Mother>
 <Father name="Franz" inCome="2500.0"/>
 </Family>
 XMLString;
 
 // Get generator
 $Generator = new Util_ClassGenerator();
 // Create family ..
 $Family = $Generator->createFromXML($XMLFamily);
 // Let's take a look ..
 print_r ($Family);
 
 
 |