我在Lumen文档here中一遍又一遍地看到了function () use ($app) {
语法。
完整语法如下:
$app->group(['middleware' => 'auth'], function () use ($app) {
$app->get('/', function () {
// Uses Auth Middleware
});
});
这东西与PHP有某种联系吗?流明? Laravel也有吗?
看起来像PHP中的匿名函数,没有大括号,但是,在此特定代码示例的上下文中,use
关键字没有意义。据我所知,使用use
就像是别名或OOP上下文中的特征。
尝试稍作更改,因为我不是function ()
的忠实支持者:D我尝试使用function () { use ($app) {
会导致语法错误。
我以前在PHP中从未见过类似的东西,您能给我一些细节吗?
答案 0 :(得分:4)
在使用closure函数(在定义环境的环境中关闭的任何函数)时,您需要使用外部变量,并使用use ($foo, $var, ...)
使它们在函数内部可用。
例如,下一个closure
函数将引发异常:
$name = 'Mark';
\DB::table('users')
->where(function ($query) {
$query->where('email', 'some_email')
->orWhere('name', $name) // <- $username doesn't exist here
});
因为$name
函数中未定义closure
。
这是use
派上用场的时间:
$name = 'Mark';
\DB::table('users')
->where(function ($query) use ($name){
$query->where('email', 'some_email')
->orWhere('name', $name) // <- now it's available
});
回到您最初的问题,那不是Lumen独有的,我刚刚检查过,它也出现在Laravel应用程序中(同一个家族,所以不足为奇)。我认为$app
代表Lumen / Laravel的服务容器(有关更多信息,请阅读:Understanding the Laravel Service Container),在这种情况下,需要注册路由并使其在任何地方(在应用程序内部)可用。