代码之家  ›  专栏  ›  技术社区  ›  Jage

php是用于确定变量是否为函数的_function()。

  •  78
  • Jage  · 技术社区  · 15 年前

    我很高兴看到 anonymous functions 在php中,它允许您声明一个比您可以用它更容易操作的变量。 create_function . 现在我想知道是否有一个传递变量的函数,如何检查它以确定它是否是一个函数?还没有函数,当我对一个函数变量进行var_转储时:

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

    我明白这一点:

    object(Closure)#8 (0) { } 
    

    关于如何检查这是否是一个函数有什么想法吗?

    4 回复  |  直到 7 年前
        1
  •  119
  •   Pang Ajmal PraveeN    12 年前

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

    $func = function()
    {  
        echo 'asdf';  
    };
    
    if( is_callable( $func ) )
    {
        // Will be true.
    }
    
        2
  •  30
  •   Gumbo    15 年前

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

    function is_function($f) {
        return (is_string($f) && function_exists($f)) || (is_object($f) && ($f instanceof Closure));
    }
    
        3
  •  20
  •   Brilliand    10 年前

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

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

    匿名函数(在php 5.3中添加的类型)始终是 Closure 类,以及 关闭 类是匿名函数。

    在PHP中还有另一种类型的东西可以被认为是一个函数,它是实现 __invoke 魔术法。如果要包括这些(同时仍排除字符串和数组),请使用 method_exists($func, '__invoke') . 这仍然包括闭包,因为闭包实现了 调用调用 为了一致性。

        4
  •  1
  •   Artemiy StagnantIce Alexeew    7 年前
    function is_function($f) {
        return is_callable($f) && !is_string($f);
    }