Как прокси функцию varargs в переполнении стека

Я хотел бы «прокси» функцию 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
)

Как это исправить? Какая-то странная магия отражения?

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);
}
4

Другие решения

Альтернативно, в этом случае:

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);
0

По вопросам рекламы [email protected]