public function __get($key = '') { $ret = NULL; $parts = array(); if(strpos($key, '.') !== FALSE) { $parts = explode('.', $key); $key = array_shift($parts); } $level = $this->__isset($key); if($level !== FALSE) { $ret = $this->vars[$level][$key]; // deal with sub objects :) $i = -1; while(isset($parts[++$i])) { $key = $parts[$i]; if((is_array($ret) || $ret instanceof ArrayAccess) && isset($ret[$key])) { $ret = $ret[$key]; } else if(is_object($ret)) { if(isset($ret->$key)) { $ret = $ret->$key; } else { $key = 'get'. camelize($key); if(method_exists($ret, $key)) { $ret = $ret->$key(); } } } else { break; } } } return $ret; }