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