Если по какой-то причине вы не можете использовать ReflectionClass::newInstanceArgs
, вот другое решение, использующее eval ():
function make_instance($class, $args) {
$arglist = array();
$i = 0;
foreach($args => &$v) {
$arglist[] = $n = '_arg_'.$i++;
$$n = &$v;
}
$arglist = '$'.implode(',$',$arglist);
eval("\$obj = new $class($arglist);");
return $obj;
}
$instance = make_instance('yourClassName', $yourArrayOfConstructorArguments);
Обратите внимание, что использование этой функции позволяет передавать аргументы по ссылке на конструктор, что недопустимо при ReflectionClass::newInstanceArgs
.