Laravel中的闭包是什么?

42

我看到一个 Laravel 中间件中的函数:

public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->check())
    {
       return redirect('/home');
    } 

    return $next($request);
}

Closure是什么,它的作用是什么?


闭包是一个被变量 $next 包含的函数。而在参数 $next 前面的 Closure 是类型提示。请问您有什么问题? - Niklesh Raut
我不明白。你能简要解释一下吗? - vishal ribdiya
在此之前,您需要检查一下这个链接:http://php.net/manual/en/functions.anonymous.php - Niklesh Raut
好的,现在我没有选择了。 - vishal ribdiya
好的!那个链接对我很有用。谢谢你的努力!! - vishal ribdiya
1个回答

86

闭包是一种匿名函数。闭包通常用作回调方法,并可以用作函数的参数。

如果你看下面的例子:

function handle(Closure $closure) {
    $closure();
}

handle(function(){
    echo 'Hello!';
});

我们首先向handle函数添加一个Closure参数。这会提示我们handle函数接受一个Closure

然后我们调用handle函数,并将一个函数作为第一个参数传递。

通过在handle函数中使用$closure();,告诉PHP执行给定的Closure,然后输出“Hello!”

还可以将参数传递给Closure。我们可以通过更改handle函数中的Closure调用来传递参数。在本例中,我只传递一个字符串,但这可以是任何变量。

现在,handle函数看起来像:

function handle(Closure $closure) {
    $closure('Hello World!');
}

现在我们还需要修改Closure本身,以便接受参数。我们只需向函数添加参数即可。然后将该变量传递给echo

函数现在看起来像这样:

handle(function($value){
    echo $value;
});

这将会回显Hello World!

如需了解更多信息,请查看以下链接:

http://php.net/manual/en/functions.anonymous.php

http://php.net/manual/en/class.closure.php


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接