Передача массива как аргументов в конструктор
Одна из вещей,
$result = call_user_func_array('myfunc', $args); // старый синтаксис
$result = myfunc(...$args); // PHP 5.6+Но помимо приятности, он решает две проблемы.
switch (count($params)) {
case 0:
$instance = new $class();
break;
case 1:
$instance = new $class($params[0]);
break;
case 2:
$instance = new $class($params[0], $params[1]);
break;
// и так далее…
default:
$refClass = new \ReflectionClass($class);
$instance = $refClass->newInstanceArgs($params);
break;
}В новом же синтаксисе код невероятно упрощается:
$instance = new $class(...$params);А, кроме того, становится более явным и простым. Так что очень радуюсь этому новому синтаксису.
Комментарии 4
myfunc(login => 'admin', expiration => 60);
function myfunc($login, $password = null, $expiration = 3600, $isManager = 1) {
echo $login .' / '. $password.' /'.$expiration.' / '.$isManager;
}
Да, такое предложение тоже есть: https://wiki.php.net/rfc/skipparams