/** * Call to undefined method. * @param string method name * @param array arguments * @return mixed * @throws \MemberAccessException */ public static function call($_this, $name, $args) { $class = new Nette\Reflection\ClassReflection($_this); if ($name === '') { throw new \MemberAccessException("Call to class '$class->name' method without name."); } // event functionality if ($class->hasEventProperty($name)) { if (is_array($list = $_this->$name) || $list instanceof \Traversable) { foreach ($list as $handler) { callback($handler)->invokeArgs($args); } } return NULL; } // extension methods if ($cb = $class->getExtensionMethod($name)) { array_unshift($args, $_this); return $cb->invokeArgs($args); } throw new \MemberAccessException("Call to undefined method $class->name::$name()."); }