php is_function (), чтобы определить, является ли переменная функцией

Я был очень рад прочитать об анонимных функциях в php, которые позволяют вам объявлять переменную, которая работает легче, чем вы могли бы сделать с create_function . Теперь мне интересно, есть ли у меня функция, которая передается переменной, как я могу проверить ее, чтобы определить, является ли она функцией? Функция is_function () пока отсутствует, и когда я делаю var_dump переменной, которая является функцией ::

$func = function(){ echo 'asdf'; }; var_dump($func); 

Я получаю это:

 object(Closure)#8 (0) { } 

Любые мысли о том, как проверить, является ли это функцией?

Solutions Collecting From Web of "php is_function (), чтобы определить, является ли переменная функцией"

Используйте is_callable чтобы определить, является ли данная переменная функцией. Например:

 $func = function() { echo 'asdf'; }; if( is_callable( $func ) ) { // Will be true. } 

Вы можете использовать function_exists для проверки наличия функции с заданным именем. И чтобы объединить это с анонимными функциями, попробуйте следующее:

 function is_function($f) { return (is_string($f) && function_exists($f)) || (is_object($f) && ($f instanceof Closure)); } 

Если вы хотите проверить, является ли переменная анонимной функцией, а не вызываемой строкой или массивом, используйте instanceof .

 $func = function() { echo 'asdf'; }; if($func instanceof Closure) { // Will be true. } 

Анонимные функции (такие, которые были добавлены в PHP 5.3) всегда являются экземплярами класса Closure , и каждый экземпляр класса Closure является анонимной функцией.

В PHP есть еще одна вещь, которая, возможно, может считаться функцией, и это объекты, которые реализуют метод __invoke magic. Если вы хотите включить их (в то же время исключая строки и массивы), используйте method_exists($func, '__invoke') . Это все равно будет включать закрытие, поскольку закрытие реализует __invoke для согласованности.

 function is_function($f) { return is_callable($f) && !is_string($f); }