首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >php is_function(),用于确定变量是否为函数

php is_function(),用于确定变量是否为函数
EN

Stack Overflow用户
提问于 2010-05-15 00:03:44
回答 5查看 45.5K关注 0票数 93

我非常兴奋地读到了php中的anonymous functions,它可以让你声明一个比用create_function更容易实现函数的变量。现在我在想,如果我有一个传递了变量的函数,我如何检查它才能确定它是否是一个函数?目前还没有is_function()函数,当我对作为函数的变量执行var_dump时::

代码语言:javascript
复制
$func = function(){
    echo 'asdf';
};
var_dump($func);

我明白了:

代码语言:javascript
复制
object(Closure)#8 (0) { } 

有没有关于如何检查这是否是一个函数的想法?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-05-15 00:09:05

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

代码语言:javascript
复制
$func = function()
{  
    echo 'asdf';  
};

if( is_callable( $func ) )
{
    // Will be true.
}
票数 149
EN

Stack Overflow用户

发布于 2010-05-15 00:05:02

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

代码语言:javascript
复制
function is_function($f) {
    return (is_string($f) && function_exists($f)) || (is_object($f) && ($f instanceof Closure));
}
票数 35
EN

Stack Overflow用户

发布于 2014-12-13 07:50:06

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

代码语言:javascript
复制
$func = function()
{  
    echo 'asdf';  
};

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

匿名函数(PHP5.3中添加的那种)始终是Closure类的实例,并且Closure类的每个实例都是匿名函数。

在PHP中,还有一种可以被认为是函数的东西,那就是实现__invoke魔术方法的对象。如果您想包含这些(同时仍然不包括字符串和数组),请使用method_exists($func, '__invoke')。这仍然包括闭包,因为闭包实现了__invoke以保持一致性。

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2835627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档