Переслать неопределенное количество аргументов в другую функцию - PullRequest
5 голосов
/ 21 июня 2011

Я объясню вопрос простой функцией, принимающей любое число функций

function abc() {
   $args = func_get_args();
   //Now lets use the first parameter in something...... In this case a simple echo
   echo $args[0];
   //Lets remove this first parameter 
   unset($args[0]); 

   //Now I want to send the remaining arguments to different function, in the same way as it received
   .. . ...... BUT NO IDEA HOW TO . ..................

   //tried doing something like this, for a work around
   $newargs = implode(",", $args); 
   //Call Another Function
   anotherFUnction($newargs); //This function is however a constructor function of a class
   // ^ This is regarded as one arguments, not mutliple arguments....

}

Надеюсь, теперь вопрос ясен, как обходится эта ситуация?

Обновление

Я забыл упомянуть, что следующая функция, которую я вызываю, это класс конструктора другого класса.Что-то вроде

$newclass = new class($newarguments);

1 Ответ

12 голосов
/ 21 июня 2011

для простых вызовов функций

использовать call_user_func_array , но не разворачивать аргументов, просто передать массив оставшихся аргументов call_user_func_array

call_user_func_array('anotherFunction', $args);

для создания объекта

использование: ReflectionClass :: newInstanceArgs

$refClass = new ReflectionClass('yourClassName');
$obj = $refClass->newInstanceArgs($yourConstructorArgs);

или: ReflectionClass :: newinstance

$refClass = new ReflectionClass('yourClassName');
$obj = call_user_func_array(array($refClass, 'newInstance'), $yourConstructorArgs);
...