Передача аргументов из массива в php конструктору

Обычно, если я хочу передать аргументы из $ myarray в $ somefunction, я могу сделать это в php, используя

call_user_func_array($somefunction, $myarray);

Однако это не работает, если функция, которую нужно вызвать, является конструктором объекта. По довольно очевидным причинам не получается:

$myobj = new call_user_func_array($classname, $myarray);

есть ли что-нибудь довольно элегантное, что действительно работает?


person Agrajag    schedule 03.08.2010    source источник


Ответы (1)


Вы можете использовать Reflection API:

Пример:

$reflector = new ReflectionClass('Foo');
$foo = $reflector->newInstanceArgs(array('foo', 'bar'));
person Gordon    schedule 03.08.2010
comment
В PHP 5.6 вы также можете использовать распаковку аргументов с помощью оператора ... или splat: php.net/manual/en/ - person jhuet; 13.06.2015
comment
распаковка действительно хорошая ... - person Ricardo Vigatti; 06.07.2016
comment
Быстро и просто! Я уже использовал Reflection API в моем новом модуле загрузчика пакетов, и это дает мне возможность учитывать любое количество аргументов в будущих версиях. - person Shaun Cockerill; 26.03.2018