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