например:
$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"])
РЕКОМЕНДАЦИИ:
Анонимная функция: http://cz1.php.net/manual/en/functions.anonymous.php
Тест для вызываемого: http://cz2.php.net/is_callable