在laravel/lumen回调/函数定义中,"use"关键字的作用是什么?

5 浏览
0 Comments

在laravel/lumen回调/函数定义中,"use"关键字的作用是什么?

我对Lumen还不太熟悉,正在跟随这个教程学习如何在Lumen中使用JWT进行基本身份验证:\nhttps://medium.com/tech-tajawal/jwt-authentication-for-lumen-5-6-2376fd38d454 \n现在是这段代码让我有些疑惑:\n

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

\n我不明白function() use ($router)是什么意思?\n我阅读了PHP官方文档关于use的说明:https://www.php.net/manual/de/language.namespaces.importing.php \n我还参考了一个外部资源:\nhttps://www.tutorialspoint.com/php7/php7_use_statement.htm \n但我猜想我可能需要对Lumen/Laravel的内部工作原理有一些了解才能理解这里发生了什么。\n有人可以给我一点提示,并用简洁的语言解释一下这里是在做什么吗?

0
0 Comments

问题的原因是用户不理解在laravel/lumen回调/函数定义中的"use"关键字的作用。用户提到了在匿名函数/闭包中使用"use"关键字可以将外部变量引入作用域的特性,并给出了一个示例代码来说明这一点。

解决方法是使用"use"关键字将外部变量引入匿名函数/闭包的作用域。用户还提到,使用"use"关键字可以控制引入匿名函数/闭包作用域的变量,虽然无法控制传递给回调函数的参数。

用户还提供了一些额外的信息,包括在laravel的Collection类的map函数中使用匿名函数的示例代码,并提到可以通过查看相关文档来了解传递给匿名函数的参数。

文章整理如下:

在laravel/lumen回调/函数定义中的"use"关键字是一种PHP特性,用于将外部变量引入匿名函数/闭包的作用域。

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

如果没有"use"声明,变量$a将不会出现在该函数的作用域中。

由于其他地方执行了回调函数,所以无法控制传递给它的参数,但可以控制引入作用域的变量。

引用自PHP手册 - 匿名函数的示例3:

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

如果查看laravel的Collection类的map函数示例,可以看到以下代码:

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

在这种情况下,示例展示了回调函数会将Collection的项和键作为参数传递给它。

如果仍然不理解参数是什么意思,可以查看相关文档或示例代码,了解匿名函数被调用时是否会传递参数。

希望以上信息对您有帮助!

0