function &super($arguments = null) { $arguments = func_get_args(); $caller = array_pop(array_slice(debug_backtrace(), 1, 1)); if (empty($caller)) { trigger_error($this->class . '::super() must be called from inside of an instance method', E_USER_ERROR); } else { $methods =& call_class_method($this->class, 'methods'); $aliases = call_class_method($this->class, 'aliases'); $method = $caller['function']; foreach (array_reverse($aliases) as $alias) { if ($alias[1] == $method) { $method = $alias[0]; break; } } if (isset($methods[$method]) && !empty($methods[$method])) { $callee = array_shift($methods[$method]); $result =& $this->send_array($method, $arguments); array_unshift($methods[$method], $callee); } else { eval('$result = &' . build_function_call(array(get_parent_class($this), $method), $arguments) . ';'); } return $result; } }
static function new_instance_array($arguments = array()) { eval('$instance = ' . build_function_call('new ' . get_called_class(), $arguments) . ';'); return $instance; }