Вызов конструктора из переменных аргументов с помощью PHP


У меня есть функция, которая принимает переменные аргументы, которые я получаю из func_get_args().

Эта функция должна вызывать конструктор с этими аргументами. Однако я не знаю, как это сделать.

С помощью call_user_func вы можете вызывать функции с массивом аргументов, но как бы вы вызвали конструктор из него? Я не могу просто передать ему массив аргументов; он должен поверить, что я назвал его "нормально".

Спасибо вам!

Author: zneak, 2010-04-14

2 answers

Для PHP call_user_func_array. Однако с Reflection это довольно тривиально:

$reflection = new ReflectionClass( 'yourClassName' );
$instance = $reflection->newInstanceArgs( $yourArrayOfConstructorArguments );
 20
Author: Decent Dabbler, 2010-04-14 19:06:24

Если по какой-то причине вы не можете использовать 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.

 -2
Author: DUzun, 2013-05-22 11:17:06