<?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];
}
}
?>
|