<?php
 
/*
 
    masterClass
 
    Extendable template class MasterClass
 
    Enables Class Hierarchy without comprimising structure
 
    Requires: subclass
 
 
*/
 
/*****************************************/
 
 
abstract class masterClass{
 
    public $subclasses = array();
 
    private $subclassCon = array();
 
 
    public function __call($function, $arguments){
 
        foreach($this->subclasses as $subclass){
 
            if(method_exists($subclass, $function)) break;
 
        }
 
        $class = $this->getInstance($subclass);
 
        return call_user_func_array(array(&$class, $function), $arguments);
 
    }
 
 
    public function &__get($variable){
 
        if(in_array($variable,$this->subclasses))return $this->getInstance($variable);
 
        foreach($this->subclasses as $subclass){
 
            if(in_array($variable, get_class_vars($subclass))) break;
 
        }
 
        $class = $this->getInstance($subclass);
 
        return $class->$variable;
 
    }
 
 
    public function __set($variable, $value){
 
        $match = false;
 
        foreach($this->subclasses as $subclass){
 
            if(in_array($variable, get_class_vars($subclass))) $match = $subclass;
 
        }
 
        if($match != false) $class = $this->getInstance($match);
 
        else $class = &$this;
 
        $class->$variable = $value;
 
    }
 
 
    private function &getInstance($subclass){
 
        if(isset($this->subclassCon[$subclass])) return $this->subclassCon[$subclass];
 
        $this->subclassCon[$subclass] = $this->$subclass = new $subclass($this);
 
        return $this->subclassCon[$subclass];
 
    }
 
}
 
?>
 
 |