laravel/lumen callback/function 定义中的 "use" 有什么作用?

What does "use" in laravel/lumen callback/function definition do?

我是 Lumen 的新手,我正在按照本教程学习通过 Lumen 使用 JWT 进行基本身份验证: https://medium.com/tech-tajawal/jwt-authentication-for-lumen-5-6-2376fd38d454

现在是这部分代码,它给我留下了一些问号:

$router->group(
  ['middleware' => 'jwt.auth'],
  function() use ($router){
    $router->get('users', function(){
      $users=\App\User::all();
      return response()->json($users);
    });
  }
);

我不明白 function() use ($router) 是做什么的? 我看了PHP的官方关于使用:https://www.php.net/manual/de/language.namespaces.importing.php 我还研究了外部资源: https://www.tutorialspoint.com/php7/php7_use_statement.htm

但我想我仍然需要一些关于 Lumen/Laravel 内部工作原理的知识才能理解这里发生的事情。 有人可以载我一程,用几句话向我解释这里发生了什么吗?

这是一个 PHP 功能,用于将外部变量引入匿名函数/闭包的范围。

$a = 'hello';

$callback = function ($something, $else) use ($a) {
    echo $a;
};

如果没有 use 声明,$a 变量将不会在该函数的范围内。

由于其他东西正在执行您的回调,您无法控制传递给它的参数,但您可以控制您引入其范围的变量。

"Closures may also inherit variables from the parent scope. Any such variables must be passed to the use language construct."

PHP Manual - Anonymous Functions 示例 #3

附加信息:

如果您查看 Laravel 的集合 class 的 map 函数示例,您将看到:

$multiplied = $collection->map(function ($item, $key) {
    return $item * 2;
});

在这种情况下,他们向您展示了您的回调将有一个集合的项目和键作为参数传递给它。

Laravel 6.x Docs - Collections - Available Methods - map