“函数()使用($ app){”行在Lumen文档中的含义(可能在Laravel中有效)

时间:2018-08-07 22:04:47

标签: php laravel scope lumen

我在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中从未见过类似的东西,您能给我一些细节吗?

1 个答案:

答案 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),在这种情况下,需要注册路由并使其在任何地方(在应用程序内部)可用。