PHP является функция (), чтобы определить, является ли переменная функцией
Я был очень взволнован, чтобы прочитать о анонимные функции в php, который позволяет объявлять переменную, которая является функцией проще, чем вы могли бы сделать с create_function. Теперь мне интересно, есть ли у меня функция, которая передается переменной, как я могу проверить ее, чтобы определить, является ли она функцией? Еще нет функции is_function (), и когда я делаю var_dump переменной, которая является функцией::
$func = function(){
echo 'asdf';
};
var_dump($func);
Я получаю это:
object(Closure)#8 (0) { }
любой мысли о том, как проверить, если это функция?
4 ответа:
использовать
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
магический метод. Если вы хотите включить их (все еще исключая строки и массивы), используйтеmethod_exists($func, '__invoke')
. Это все равно будет включать закрытие, поскольку закрытие реализует__invoke
для единообразия.