Lumen 文档中的“function () use ($app) {”行意味着什么(可能在 Laravel 中有效)

Puk*_*own 1 php scope laravel lumen

我在 Lumen 文档中function () use ($app) {一遍又一遍地看到了语法语法。

完整的语法如下所示:

$app->group(['middleware' => 'auth'], function () use ($app) {
    $app->get('/', function ()    {
        // Uses Auth Middleware
    });
});
Run Code Online (Sandbox Code Playgroud)

这东西和PHP有什么关系吗?流明?Laravel 中也可用吗?

它看起来像 PHP 中没有大括号的匿名函数,但是,该use关键字在此特定代码示例的上下文中没有意义。据我所知,usinguse可能就像 OOP 上下文中的别名或特征。

尝试稍微改变一下,因为我不是function ():D 我的尝试使用function () { use ($app) {结果导致语法错误。

我以前在 PHP 中没有见过类似的东西,你能给我一些关于它的细节吗?

Ken*_*rna 6

当在闭包函数(任何关闭其定义环境的函数)中时,您需要使用外部变量来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
        });
Run Code Online (Sandbox Code Playgroud)

因为$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
        });
Run Code Online (Sandbox Code Playgroud)

回到你原来的问题,这并不是 Lumen 独有的,我刚刚检查过,它也存在于 Laravel 应用程序中(同一个家族,所以并不奇怪)。我认为$app代表 Lumen/Laravel 的服务容器(阅读此内容以获取更多信息:了解 Laravel 服务容器),在这种情况下需要注册路由并使它们在任何地方都可用(在应用程序内部)。