行“function()使用($ app){”是什么意思在Lumen文档中(可能在Laravel中有效)

问题描述 投票:1回答:1

我已经在Lumen docs function () use ($app) {中看到了here语法一遍又一遍地完成。

完整语法如下所示:

$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中没有看到类似的东西,你能给我一些关于它的细节吗?

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

© www.soinside.com 2019 - 2024. All rights reserved.