<?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); 
 
 
 |