Вызов конструктора из переменных аргументов с помощью PHP
У меня есть функция, которая принимает переменные аргументы, которые я получаю из func_get_args()
.
Эта функция должна вызывать конструктор с этими аргументами. Однако я не знаю, как это сделать.
С помощью call_user_func
вы можете вызывать функции с массивом аргументов, но как бы вы вызвали конструктор из него? Я не могу просто передать ему массив аргументов; он должен поверить, что я назвал его "нормально".
Спасибо вам!
2 answers
Для PHP call_user_func_array. Однако с Reflection
это довольно тривиально:
$reflection = new ReflectionClass( 'yourClassName' );
$instance = $reflection->newInstanceArgs( $yourArrayOfConstructorArguments );
Если по какой-то причине вы не можете использовать 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
.