我非常兴奋地读到了php中的anonymous functions,它可以让你声明一个比用create_function更容易实现函数的变量。现在我在想,如果我有一个传递了变量的函数,我如何检查它才能确定它是否是一个函数?目前还没有is_function()函数,当我对作为函数的变量执行var_dump时::
$func = function(){
echo 'asdf';
};
var_dump($func);
我明白了:
object(Closure)#8 (0) { }
有没有关于如何检查这是否是一个函数的想法?
发布于 2010-05-15 00:09:05
使用is_callable
确定给定变量是否为函数。例如:
$func = function()
{
echo 'asdf';
};
if( is_callable( $func ) )
{
// Will be true.
}
发布于 2010-05-15 00:05:02
您可以使用function_exists
来检查是否存在具有给定名称的函数。要将其与匿名函数相结合,请尝试如下所示:
function is_function($f) {
return (is_string($f) && function_exists($f)) || (is_object($f) && ($f instanceof Closure));
}
发布于 2014-12-13 07:50:06
如果只想检查变量是否是匿名函数,而不是可调用的字符串或数组,请使用instanceof
。
$func = function()
{
echo 'asdf';
};
if($func instanceof Closure)
{
// Will be true.
}
匿名函数(PHP5.3中添加的那种)始终是Closure
类的实例,并且Closure
类的每个实例都是匿名函数。
在PHP中,还有一种可以被认为是函数的东西,那就是实现__invoke
魔术方法的对象。如果您想包含这些(同时仍然不包括字符串和数组),请使用method_exists($func, '__invoke')
。这仍然包括闭包,因为闭包实现了__invoke
以保持一致性。
https://stackoverflow.com/questions/2835627
复制相似问题