Передача аргументов из функции в другую функцию - PullRequest
1 голос
/ 14 августа 2011

У меня есть что-то вроде этого

  function f1($name = ''){
    f2("prefix_{$name}", $args);
  }

функция f1 () вызывается так:

f1('name', $var1, $var2, $var3);

Как я могу передать эти переменные в f2 () внутри него так же, как они передаются в f1 ()?

так вместо f2("prefix_{$name}", $args);

должно быть как f2("prefix_{$name}", $var1, $var2, $var3);

Не то чтобы я не контролировал функцию f2: (

Ответы [ 2 ]

2 голосов
/ 14 августа 2011
function f1( $name = '' )
{
    // get all arguments to this function
    $args = func_get_args();
    // prefix the first arguments with some prefix
    $args[ 0 ] = 'prefix_' . $name;
    // call the second function with the $args array as its arguments
    call_user_func_array( 'f2', $args );
}

изменить:
заменил

$args[ 0 ] = 'prefix_' . $args[ 0 ];

на

$args[ 0 ] = 'prefix_' . $name;

, чтобы объяснить, что Джерри сказал в своем ответе .

1 голос
/ 14 августа 2011

Обычный func_get_args () не будет учитывать аргументы по умолчанию, поэтому вам нужно сделать что-то вроде этого:

function func_get_default_args($a) {
    $args = array_slice(func_get_args(), 1);
    return array_merge($args, array_slice($a, sizeof($args)));
}

function f1($name = ''){
    call_user_func_array('f2', func_get_default_args(func_get_args(), $name));
}
...