我有类似的东西
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功能:(
答案 0 :(得分:2)
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 :(得分:1)
常规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));
}