首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP:类型提示- `Closure`和`Callable`的区别

PHP:类型提示- `Closure`和`Callable`的区别
EN

Stack Overflow用户
提问于 2015-04-19 21:49:13
回答 1查看 42K关注 0票数 152

我注意到,如果我们希望运行一些回调函数,我可以使用ClosureCallable中的任何一个作为类型提示。例如:

代码语言:javascript
复制
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,或者它们服务于相同的目的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-19 21:56:53

不同之处在于,Closure必须是匿名函数,而callable也可以是普通函数。

您可以使用下面的示例查看/测试这一点,您将看到第一个错误:

代码语言:javascript
复制
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作为类型提示。

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

https://stackoverflow.com/questions/29730720

复制
相关文章

相似问题

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