在laravel/lumen回调/函数定义中,"use"关键字的作用是什么?
在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有人可以给我一点提示,并用简洁的语言解释一下这里是在做什么吗?
问题的原因是用户不理解在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的项和键作为参数传递给它。
如果仍然不理解参数是什么意思,可以查看相关文档或示例代码,了解匿名函数被调用时是否会传递参数。
希望以上信息对您有帮助!