php is_function()确定变量是否是函数

时间:2010-05-14 16:03:44

标签: php anonymous-function

我很高兴在php中阅读anonymous functions,它让你声明一个函数比使用create_function更容易的变量。现在我想知道我是否有一个传递变量的函数,我如何检查它以确定它是否是一个函数?还没有is_function()函数,当我做一个变量的var_dump是一个函数::

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

我明白了:

object(Closure)#8 (0) { } 

有关如何检查这是否是一个功能的任何想法?

5 个答案:

答案 0 :(得分:120)

使用is_callable确定给定变量是否为函数。例如:

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

if( is_callable( $func ) )
{
    // Will be true.
}

答案 1 :(得分:30)

您可以使用function_exists检查是否存在具有给定名称的函数。要将其与匿名函数结合使用,请尝试以下方法:

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

答案 2 :(得分:21)

如果您只想检查变量是否是匿名函数,而不是可调用字符串或数组,请使用instanceof

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

if($func instanceof Closure)
{
    // Will be true.
}

匿名函数(在PHP 5.3中添加的类型)始终是Closure类的实例,Closure类的每个实例都是匿名函数。

PHP中的另一种类型的东西可以被认为是一个函数,以及实现__invoke魔术方法的对象。如果要包含这些(但仍排除字符串和数组),请使用method_exists($func, '__invoke')。这仍将包括闭包,因为闭包实现__invoke以保持一致性。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

在php中,有效的可调用对象可以是函数,函数名(字符串)和格式为['className', 'staticMethod'][$object, 'method']的数组,因此仅检测函数就需要排除字符串和数组:

function isFunction($callable) {
    return $callable && !is_string($callable) && !is_array($callable) && is_callable($callable);
}
相关问题