/** * Creates a Method which, when called, will delegate to a given instance variable */ public static function create_delegate_for_reflection(\ReflectionMethod $method, $variable) { $method_name = $method->getName(); $m = new Method($method_name); $m->set_arg_list(ArgumentList::create_from_reflection_method($method)); if ($method->returnsReference()) { $m->set_reference_returned(true); } if ($method->isPublic()) { $m->set_access_public(); } elseif ($method->isProtected()) { $m->set_access_protected(); } elseif ($method->isPrivate()) { $m->set_access_private(); } $body = ' return call_user_func_array( array($this->' . $variable . ', "' . $method_name . '"), func_get_args() ); '; $m->set_body(trim(preg_replace('/\\s+/', ' ', $body))); return $m; }