我注意到,如果我们希望运行一些回调函数,我可以使用Closure
或Callable
中的任何一个作为类型提示。例如:
function callFunc1(Closure $closure) {
$closure();
}
function callFunc2(Callable $callback) {
$callback();
}
$function = function() {
echo 'Hello, World!';
};
callFunc1($function); // Hello, World!
callFunc2($function); // Hello, World!
问题:
这里有什么不同?换句话说,什么时候使用Closure
,什么时候使用Callable
,或者它们服务于相同的目的?
发布于 2015-04-19 21:56:53
不同之处在于,Closure
必须是匿名函数,而callable
也可以是普通函数。
您可以使用下面的示例查看/测试这一点,您将看到第一个错误:
function callFunc1(Closure $closure) {
$closure();
}
function callFunc2(Callable $callback) {
$callback();
}
function xy() {
echo 'Hello, World!';
}
callFunc1("xy"); // Catchable fatal error: Argument 1 passed to callFunc1() must be an instance of Closure, string given
callFunc2("xy"); // Hello, World!
因此,如果您只想输入提示匿名函数,请使用:Closure
,如果您还希望允许正常函数,请使用callable
作为类型提示。
https://stackoverflow.com/questions/29730720
复制相似问题