Jag*_*age 81 php anonymous-function
我非常兴奋地阅读php中的匿名函数,它允许您声明一个比使用create_function更容易的函数变量.现在我想知道我是否有一个传递变量的函数,我如何检查它以确定它是否是一个函数?还没有is_function()函数,当我做一个函数的变量var_dump时::
$func = function(){
echo 'asdf';
};
var_dump($func);
Run Code Online (Sandbox Code Playgroud)
我明白了:
object(Closure)#8 (0) { }
Run Code Online (Sandbox Code Playgroud)
有关如何检查这是否是一个功能的任何想法?
Jon*_*cto 131
使用is_callable来确定给定的变量是否是一个函数.例如:
$func = function()
{
echo 'asdf';
};
if( is_callable( $func ) )
{
// Will be true.
}
Run Code Online (Sandbox Code Playgroud)
Gum*_*mbo 32
您可以使用function_exists检查具有给定名称的函数.要将其与匿名函数结合使用,请尝试以下操作:
function is_function($f) {
return (is_string($f) && function_exists($f)) || (is_object($f) && ($f instanceof Closure));
}
Run Code Online (Sandbox Code Playgroud)
Bri*_*and 23
如果您只想检查变量是否是匿名函数,而不是可调用字符串或数组,请使用instanceof.
$func = function()
{
echo 'asdf';
};
if($func instanceof Closure)
{
// Will be true.
}
Run Code Online (Sandbox Code Playgroud)
匿名函数(在PHP 5.3中添加的类型)始终是Closure类的实例,并且类的每个实例Closure都是匿名函数.
PHP中的另一种类型的东西可以被认为是一个函数,而这是实现__invoke魔术方法的对象.如果要包含这些(但仍然排除字符串和数组),请使用method_exists($func, '__invoke').这仍将包括闭包,因为闭包实现__invoke了一致性.
| 归档时间: |
|
| 查看次数: |
38444 次 |
| 最近记录: |