2012-03-16 4 views
7

У меня есть массив аргументов, которые я хочу передать функции через call_user_func. Следующий код в настоящее время дает ошибку: Missing argument 2 for Closure. Как это можно переписать для правильной работы?Передача нескольких аргументов анонимной функции w/call_user_func

$args = array('foo', 'bar'); 
call_user_func(function($arg1, $arg2) {}, $args); 

ответ

15

Попробуйте call_user_func_array(), если вы хотите передать массив параметров.

+1

Лучший ответ, чем мой. –

+0

@KyleDecot Лучший способ поблагодарить меня - это принять ответ, если это сработало для вас :) – Crashspeeder

0

Либо передавать их один за другим, либо функция обратного вызова принимает массив в качестве аргумента и выполняет синтаксический анализ внутри.

1

Знание этого ответа. Однако следующее также отлично работает.

Exec между 100000 доступ


1,006599: call_user_func ($ FUNC, $ значение)

1,193323: call_user_func ((массив ($ объекта, $ FUNC), $ значение)

1.232891: call_user_func_array ($ FUNC, массив ($ значение))

1,309725: call_user_func_array ((массив ($ объекта, $ FUNC), массив ($ значение)

Если вам нужно использовать call_user_func:

call_user_func(
    $function, 
     $arg1,$arg2 
); 

Если вам нужно использовать call_user_func_array:

call_user_func_array(
    $function, 
     array($arg1,$arg2) 
); 

Конструктивно оба могут проходить в массивах независимо. Однако, также по дизайну, для использования может потребоваться больше, чем в другом. Все зависит от того, для чего оно используется. Упрощенный набор массивов проходит просто отлично и быстрее, в call_user_func.

Смежные вопросы