PHP call_user_func по сравнению только с вызыванием функции

Если у Вас нет alrady, читайте на том, что делает шепелявость уникальным языком. Если Вы не сделаете этого сначала, то Вы будете пытаться сделать то же самое, которое Вы могли сделать на некоторых других языках программирования.

Тогда попытка реализовать некоторую мелочь (пытаются сделать это полезным для Вас или у Вас не могло бы быть мотивации).

Lisp в поле является отличным способом намочить ноги.

85
задан Donald Duck 27 November 2017 в 22:34
поделиться

5 ответов

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

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

84
ответ дан 24 November 2019 в 08:20
поделиться

Хотя вы можете вызывать имена функций переменных следующим образом:

function printIt($str) { print($str); }

$funcname = 'printIt';
$funcname('Hello world!');

бывают случаи, когда вы не знаете, сколько аргументов вы передаете. Обратите внимание на следующее:

function someFunc() {
  $args = func_get_args();
  // do something
}

call_user_func_array('someFunc',array('one','two','three'));

Это также удобно для вызова статических и объектных методов соответственно:

call_user_func(array('someClass','someFunc'),$arg);
call_user_func(array($myObj,'someFunc'),$arg);
31
ответ дан 24 November 2019 в 08:20
поделиться

есть опция call_user_func , поэтому вы можете делать такие вещи, как:

$dynamicFunctionName = "barber";

call_user_func($dynamicFunctionName, 'mushroom');

где строка dynamicFunctionName может быть более интересной и сгенерированной при запуске- время. Вы не должны использовать call_user_func без необходимости, потому что это медленнее.

15
ответ дан 24 November 2019 в 08:20
поделиться

Я полагаю, это полезно для вызова функции, имя которой вы заранее не знаете ... Примерно так:

switch($value):
{
  case 7:
  $func = 'run';
  break;
  default:
  $func = 'stop';
  break;
}

call_user_func($func, 'stuff');
7
ответ дан 24 November 2019 в 08:20
поделиться

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

0
ответ дан 24 November 2019 в 08:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: