Передать несколько аргументов анонимной функции w / call_user_func - PullRequest
7 голосов
/ 16 марта 2012

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

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

Ответы [ 3 ]

15 голосов
/ 16 марта 2012

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

1 голос
/ 24 марта 2013

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

Exec между 100 000 доступов


1,006599: call_user_func ($ func, $ value)

1.193323: call_user_func ((массив ($ object, $ func), $ value)

1.232891: call_user_func_array ($ func, array ($ value))

1.309725: call_user_func_array ((массив ($ object, $ func), массив ($ value)

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

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

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

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

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

0 голосов
/ 16 марта 2012

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

...