Я хотел бы «прокси» функцию varargs (вроде как ярлык):
/** The PROXY function */
function proxy_to_foo(/*varargs*/)
{
real_foo(func_get_args());
}
/** The real function */
function real_foo(/*varargs*/)
{
print_r(func_get_args());
}
// Now I call it:
proxy_to_foo(1, 2, 3);
Но я понимаю (очевидно):
Array
(
[0] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
)
В то время как это было намерение:
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Как это исправить? Какая-то странная магия отражения?
использование call_user_func_array
:
/** The PROXY function */
function proxy_to_foo(/*varargs*/)
{
call_user_func_array('real_foo', func_get_args());
}
Если ваш php 5.6 и выше, используйте аргументы переменной функции:
function proxy_to_foo(...$args)
{
real_foo(...$args);
}
function real_foo(...$args)
{
print_r($args);
}
Альтернативно, в этом случае:
function proxy_to_foo(/*varargs*/)
{
real_foo(func_get_args());
}
function real_foo(/*varargs*/)
{
print_r(iterator_to_array(new RecursiveIteratorIterator(
new RecursiveArrayIterator(func_get_args())), FALSE));
}
proxy_to_foo(1, 2, 3);