Можете ли вы сохранить функцию в массиве PHP?

например:

$functions = array( 'function1' => function($echo) { echo $echo; } ); 

Это возможно? Какая лучшая альтернатива?

Есть несколько вариантов. Используйте create_function :

 $functions = array( 'function1' => create_function('$echo', 'echo $echo;') ); 

Просто сохраните имя функции в виде строки (это эффективно делает все create_function ):

 function do_echo($echo) { echo $echo; } $functions = array( 'function1' => 'do_echo' ); 

Если вы используете PHP 5.3, вы можете использовать анонимные функции :

 $functions = array( 'function1' => function($echo) { echo $echo; } ); 

Все эти методы перечислены в документации под callback . Какой бы вариант вы ни выбрали, рекомендуемым способом вызова вашей функции было бы либо call_user_func либо call_user_func_array .

 call_user_func($functions['function1'], 'Hello world!'); 

Чтобы следить за сообщением Alex Barrett, create_function () возвращает значение, которое вы действительно можете использовать для вызова функции, таким образом:

 $function = create_function('$echo', 'echo $echo;' ); $function('hello world'); 

Поскольку PHP «5.3.0 Анонимные функции становятся доступными», пример использования:

обратите внимание, что это намного быстрее, чем использование старой create_function

 //store anonymous function in an array variable eg $a["my_func"] $a = array( "my_func" => function($param = "no parameter"){ echo "In my function. Parameter: ".$param; } ); //check if there is some function or method if( is_callable( $a["my_func"] ) ) $a["my_func"](); else echo "is not callable"; // OUTPUTS: "In my function. Parameter: no parameter" echo "\n<br>"; //new line if( is_callable( $a["my_func"] ) ) $a["my_func"]("Hi friend!"); else echo "is not callable"; // OUTPUTS: "In my function. Parameter: Hi friend!" echo "\n<br>"; //new line if( is_callable( $a["somethingElse"] ) ) $a["somethingElse"]("Something else!"); else echo "is not callable"; // OUTPUTS: "is not callable",(there is no function/method stored in $a["somethingElse"]) 

РЕКОМЕНДАЦИИ: