Если у Вас нет alrady, читайте на том, что делает шепелявость уникальным языком. Если Вы не сделаете этого сначала, то Вы будете пытаться сделать то же самое, которое Вы могли сделать на некоторых других языках программирования.
Тогда попытка реализовать некоторую мелочь (пытаются сделать это полезным для Вас или у Вас не могло бы быть мотивации).
Lisp в поле является отличным способом намочить ноги.
Всегда используйте фактическое имя функции, если вы его знаете.
call_user_func
предназначен для вызова функций, имя которых вы не знаете заранее, но оно гораздо менее эффективно, поскольку программа должна искать функцию во время выполнения.
Хотя вы можете вызывать имена функций переменных следующим образом:
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);
есть опция call_user_func
, поэтому вы можете делать такие вещи, как:
$dynamicFunctionName = "barber";
call_user_func($dynamicFunctionName, 'mushroom');
где строка dynamicFunctionName
может быть более интересной и сгенерированной при запуске- время. Вы не должны использовать call_user_func без необходимости, потому что это медленнее.
Я полагаю, это полезно для вызова функции, имя которой вы заранее не знаете ... Примерно так:
switch($value):
{
case 7:
$func = 'run';
break;
default:
$func = 'stop';
break;
}
call_user_func($func, 'stuff');
в вашем первом примере вы используете имя функции, которое является строкой. он может исходить извне или определяться на лету. то есть вы не знаете, какую функцию нужно будет запустить в момент создания кода.