Как передать функцию в качестве параметра другой функции?
У меня есть список функций a()
, b()
, c()
У меня есть функция main()
.
В зависимости от случая, мне нужно передать другую функцию main() для использования.
В javascript это будет:
var a = function(){}
var b = function(){}
var c = function(){}
var func = (some logic) a, b or c;
main(func);
Как это сделать в php5. 3?
Я пытаюсь избежать использования
$func_name = "a";
main($func_name){
$func_name();
}
Или, может быть, это лучший способ, и я не должен использовать замыкания любого типа?
3 ответа:
Та же идея в PHP 5.3, как вы можете создать анонимные функции:
$sayHello = function($var) { echo "Hello ", $var; }; // Logic here to determine what $func is set to $func = $sayHello; function callCustom($function) { if(!is_callback($function)) { // throw exception } $function("World"); } callCustom($func); // Hello World
Попробуйте это:
$a = function(){}; $b = function(){}; $c = function(){}; switch (rand(0, 2)) { case 0: $func = $a; break; case 1: $func = $b; break; case 2: $func = $c; break; } var_dump($func);
Вы можете увидеть рабочий пример здесь http://codepad.viper-7.com/Ut5yGQ
Примечание: я использовал
var_dump
вместоmain
, посколькуmain
не определен
В PHP все, что "вызывается" (
is_callable
документы) может быть вызван (вызван). Руководство часто называет эти параметры так: Callback , псевдотип в PHPдокументы.Вы можете использовать любой из различных обратных вызовов и передавать их в качестве параметра функции:
function main($callback) { call_user_func($callback); }
Тогда ваша функция будет работать с любым допустимым обратным вызовом PHP.
Кроме того, функции могут быть вызваны с переменными, некоторые примеры:
Вызов Переменной Функции:
function name() {}; $function = 'name'; # function name as string $function(); # invoke
анонимная функция как вызов переменной функции:
$function = function() {}; # define function $function(); # invoke
Смотрите также переменные функциидокументы.