private function _callWithParams($func, $params)
{
if (!$params) {
return call_user_func($func);
}
$ref = new \ReflectionFunction($func);
$args = [];
foreach ($ref->getParameters() as $param) {
$name = $param->getName();
if (isset($params[$name])) {
if ($param->isArray()) {
$args[] = is_array($params[$name]) ? $params[$name] : [$params[$name]];
} else {
if (!is_array($params[$name])) {
$args[] = $params[$name];
} else {
return false;
}
}
} else {
if ($param->isDefaultValueAvailable()) {
$args[] = $param->getDefaultValue();
} else {
return false;
}
}
}
return $ref->invokeArgs($args);
}