"function () use ($app) {" 行在 Lumen 文档中是什么意思(可能在 Laravel 中有效)
What does the line "function () use ($app) {" means in the Lumen docs (probably valid in Laravel)
我在 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 中没有看到过类似的东西,你能给我一些细节吗?
在 函数中(任何在其定义环境中关闭的函数)需要使用外部变量时,您使用 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),在这种情况下需要它来注册路由并使它们在任何地方都可用(内部应用程序)。
我在 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 中没有看到过类似的东西,你能给我一些细节吗?
在 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),在这种情况下需要它来注册路由并使它们在任何地方都可用(内部应用程序)。