В чем разница между call_user_func_array и вызовами с распаковкой argumet / тремя точками (... $ array)? - PullRequest
1 голос
/ 05 марта 2020

Я нашел два решения о том, как динамически вызывать $function на $instance с $arguments в виде массива.

Версия с call_user_func_array

$result = call_user_func_array(array($instance, $function), $arguments);

Легче читать с трехточечным обозначением Распаковка аргумента

$result = $instance->$function)(...$arguments);

Теперь я нашел плюсы только для второго варианта - по словам какого-то парня из документа, это еще быстрее.

В чем различия? Есть ли минусы, чтобы не использовать второй вариант над первым?

1 Ответ

1 голос
/ 05 марта 2020

Обратите внимание, что они на самом деле делают разные вещи:

Распаковка аргументов - это просто распаковка аргументов для использования функцией.

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

В вашем случае не будет особой разницы, поскольку ваш код делает по существу то же самое, но обычно вы используете call_user_func_array ТОЛЬКО когда вы хотите вызвать функцию через него, вы выиграли ' используйте его только для распаковки аргументов (если вы не используете PHP ниже 5.6).

TLDR : хотя call_user_func_array распаковывает аргументы, это не главная идея, а основная идея - вызвать функцию (и передать ей аргументы).

Также обычно вы не должны вызывать такие функции, как это, и это сигнализирует, что с кодовой базой есть что-то ужасное, если только у вас не очень конкретный случай c.

...