Laravel 中的闭包是什么?

2021-12-18 00:00:00 closures php laravel laravel-5

我在中间看到了一个 Laravel 函数:

I saw one Laravel function in middlewere:

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

    return $next($request);
}

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

What is Closure and what does it do?

推荐答案

A 关闭 是一个匿名函数.闭包通常用作回调方法,并且可以用作函数中的参数.

A Closure is an anonymous function. Closures are often used as callback methods and can be used as a parameter in a function.

如果你看下面的例子:

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

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

我们首先在 handle 函数中添加一个 Closure 参数.这将提示我们 handle 函数接受一个 Closure.

We start by adding a Closure parameter the handle function. This will type hint us that the handle function takes a Closure.

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

We then call the handle function and pass a function as the first parameter.

通过在 handle 函数中使用 $closure(); 我们告诉 PHP 执行给定的 Closure 然后 echo'你好!'

By using $closure(); in the handle function we tell PHP to execute the given Closure which will then echo 'Hello!'

也可以将参数传递到 Closure.我们可以通过更改 handle 函数中的 Closure 调用来传递参数来实现.在这个例子中,我将只传递一个字符串,但这可以是任何变量.

It is also possible to pass parameters into a Closure. We can do so by changing the Closure call in the handle function to pass on a parameter. In this example i'll just pass a string but this can be any variable.

handle 函数现在看起来像

The handle function now looks like

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

我们现在还需要修改 Closure 本身以获取参数.我们通过简单地向函数添加一个参数来实现.然后我们将该变量传递给 echo.

We now also need to modify the Closure itself to take the parameter. We do so by simply adding a parameter to the function. And then we pass that variable to the echo.

函数现在看起来像

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

哪个将回显 Hello World!

有关更多信息,您可以查看以下链接:

For more information you can check out these links:

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

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

相关文章