Подтвердить что ты не робот

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

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

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

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

Спасибо!

4b9b3361

Ответ 1

Для PHP < 5.3 это легко выполнимо без предварительного создания экземпляра класса с call_user_func_array. Однако с Reflection это довольно тривиально:

$reflection = new ReflectionClass( 'yourClassName' );
$instance = $reflection->newInstanceArgs( $yourArrayOfConstructorArguments );

Ответ 2

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