php is_function()来确定一个variables是否是一个函数

我非常兴奋地阅读了php中的匿名函数 ,这些函数可以让你声明一个比create_function更容易实现的函数。 现在我想知道如果我有一个函数,通过一个variables,我怎么能检查它,以确定它是否是一个函数? 没有is_function()函数,当我做一个variablesvar_dump是一个函数::

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

我得到这个:

 object(Closure)#8 (0) { } 

任何想法如何检查这是一个function?

使用is_callable来确定一个给定的variables是否是一个函数。 例如:

 $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)); } 

如果您只想检查variables是否是匿名函数,而不是可调用的string或数组,请使用instanceof

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

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

在PHP中还有另一种types的东西,可以被认为是一个函数,这是实现__invoke魔术方法的对象。 如果你想包括那些(虽然仍然排除string和数组),使用method_exists($func, '__invoke') 。 这仍然包括closures,因为closures实现__invoke的一致性。

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