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


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

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

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

object(Closure)#8 (0) { } 

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

4 74

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 для единообразия.

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