public static computeFuncParams ( ReflectionFunctionAbstract $reflection, array $args, array $options, boolean $needTagInDocComment = true ) : array | ||
$reflection | ReflectionFunctionAbstract | |
$args | array | |
$options | array | |
$needTagInDocComment | boolean | Whether the compute-params tag must be present in the doc comment |
return | array |
public static function computeFuncParams(ReflectionFunctionAbstract $reflection, array $args, array $options, $needTagInDocComment = true)
{
if ($needTagInDocComment && !preg_match('/@compute-params/', $reflection->getDocComment())) {
return array($args, $options);
}
$nbRequiredParams = $reflection->getNumberOfRequiredParameters();
if (count($args) < $nbRequiredParams) {
throw new ConsoleException("Not enough parameters in '" . $reflection->getName() . "'");
}
$params = $args;
if (count($args) > $nbRequiredParams) {
$params = array_slice($args, 0, $nbRequiredParams);
$args = array_slice($args, $nbRequiredParams);
}
foreach ($reflection->getParameters() as $param) {
if ($param->isOptional() && substr($param->getName(), 0, 1) !== '_') {
if (array_key_exists($param->getName(), $options)) {
$params[] = $options[$param->getName()];
unset($options[$param->getName()]);
} else {
$params[] = $param->getDefaultValue();
}
}
}
$params[] = $args;
$params[] = $options;
return $params;
}
/** * If not overriden, will execute the command specified * as the first argument * * Commands must be defined as methods named after the * command, prefixed with execute (eg. create -> executeCreate) * * @param array $args * @param array $options */ public function execute(array $args, array $options = array()) { if (!count($args)) { throw new ConsoleException("Missing subcommand name"); } $command = ucfirst(Utils::camelize(array_shift($args))); $methodName = "execute{$command}"; if (!method_exists($this, $methodName)) { throw new ConsoleException("Command '{$command}' does not exist"); } $method = new ReflectionMethod($this, $methodName); $params = Utils::computeFuncParams($method, $args, $options); return $method->invokeArgs($this, $params); }