laravel / lumen回调/函数定义中的“用途”是做什么的?

时间:2019-12-02 11:31:14

标签: php laravel lumen

我对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内部运作的知识,以了解这里发生的情况。 有人可以帮我搭便车,并在几行中向我解释一下吗?

1 个答案:

答案 0 :(得分:4)

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

$a = 'hello';

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

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

由于其他事情正在执行您的回调,因此您无法控制传递给它的参数,但可以控制要带入回调范围的变量。

  

“闭包也可能从父作用域继承变量。任何此类变量都必须传递给use语言构造。”

PHP Manual - Anonymous Functions 示例#3

其他信息:

如果您查看Laravel的Collection类的map函数的示例,则会看到以下内容:

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

在这种情况下,它们向您显示回调将具有一个Collection的项目和作为参数传递给它的键。

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