src/eMacros/Runtime/Method/MethodInvoke.php
public function execute(array $arguments) {
		if (empty($arguments)) throw new \BadFunctionCallException('MethodInvoke: No parameters found.');
		
		if (is_null($this->method)) {
			if (!isset($arguments[1])) throw new \BadFunctionCallException('MethodInvoke: No instance defined.');
			//check method type
			if (!is_string($arguments[0]))
				throw new \InvalidArgumentException(sprintf("MethodInvoke: A value of type string was expected as first argument but %s found instead.", gettype($arguments[0])));
			//check istance type
			if (!is_object($arguments[1]))
				throw new \InvalidArgumentException(sprintf("MethodInvoke: A value of type object was expected but %s found instead.", gettype($arguments[1])));
			$method = $arguments[0];
			$instance = $arguments[1];
			$parameters = array_slice($arguments, 2);
		}
		else {
			if (!is_object($arguments[0]))
				throw new \InvalidArgumentException(sprintf("MethodInvoke: A value of type object was expected but %s found instead.", gettype($arguments[0])));
			$method = $this->method;
			$instance = $arguments[0];
			$parameters = array_slice($arguments, 1);
		}

		//check method existence
		if (!method_exists($instance, $method)) {
			if (!method_exists($instance, '__call')) throw new \InvalidArgumentException(sprintf("MethodInvoke: Method '$method' was not found on instance of '%s'.", get_class($instance)));
			return call_user_func([$instance, '__call'], $method, $parameters);
		}
		
		//check method access and required parameters
		$rm = new \ReflectionMethod($instance, $method);
		if (!$rm->isPublic()) throw new \BadMethodCallException(sprintf("Method '%s' does not have public access.", $method));
		if ($rm->getNumberOfRequiredParameters() > count($parameters))
			throw new \BadMethodCallException(sprintf("Method '%s' expects at least %d argument(s).", $method, $rm->getNumberOfRequiredParameters()));
		return call_user_func_array(array($instance, $method), $parameters);
	}
public function execute(array $arguments) {
		if (empty($arguments)) throw new \BadFunctionCallException('MethodInvoke: No parameters found.');
		
		if (is_null($this->method)) {
			if (!isset($arguments[1])) throw new \BadFunctionCallException('MethodInvoke: No instance defined.');
			//check method type
			if (!is_string($arguments[0]))
				throw new \InvalidArgumentException(sprintf("MethodInvoke: A value of type string was expected as first argument but %s found instead.", gettype($arguments[0])));
			//check istance type
			if (!is_object($arguments[1]))
				throw new \InvalidArgumentException(sprintf("MethodInvoke: A value of type object was expected but %s found instead.", gettype($arguments[1])));
			$method = $arguments[0];
			$instance = $arguments[1];
			$parameters = array_slice($arguments, 2);
		}
		else {
			if (!is_object($arguments[0]))
				throw new \InvalidArgumentException(sprintf("MethodInvoke: A value of type object was expected but %s found instead.", gettype($arguments[0])));
			$method = $this->method;
			$instance = $arguments[0];
			$parameters = array_slice($arguments, 1);
		}

		//check method existence
		if (!method_exists($instance, $method)) {
			if (!method_exists($instance, '__call')) throw new \InvalidArgumentException(sprintf("MethodInvoke: Method '$method' was not found on instance of '%s'.", get_class($instance)));
			return call_user_func([$instance, '__call'], $method, $parameters);
		}
		
		//check method access and required parameters
		$rm = new \ReflectionMethod($instance, $method);
		if (!$rm->isPublic()) throw new \BadMethodCallException(sprintf("Method '%s' does not have public access.", $method));
		if ($rm->getNumberOfRequiredParameters() > count($parameters))
			throw new \BadMethodCallException(sprintf("Method '%s' expects at least %d argument(s).", $method, $rm->getNumberOfRequiredParameters()));
		return call_user_func_array(array($instance, $method), $parameters);
	}
Invokes a method with the given arguments
Usage: (->format (new Datetime) "Y-m-d")
Returns: mixed
(non-PHPdoc)
@see \eMacros\Runtime\GenericFunction::execute()