假设我有一个像这样的控制器:
<?php
namespace App\Http\Controllers\Admin;
use DB;
class LanguageController extends Controller
{
}
想象一下,数据库已注册为别名,并指向Illuminate\Support\Facades\DB::class.
我现在有问题。
1)为什么use DB;
在此控制器中起作用?我认为use DB
之后应该做的是,它应该尝试在该控制器所在的目录中查找该类。
2)我知道,如果我在控制器的函数中编写\DB::query
甚至不使用“ use”语句,它将起作用。我知道反斜杠意味着它将尝试在全局名称空间中查找数据库类。但是全局名称空间到底在哪里?
答案 0 :(得分:0)
在config/app.php
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
...........
'Crypt' => Illuminate\Support\Facades\Crypt::class,
'DB' => Illuminate\Support\Facades\DB::class,
'Eloquent' => Illuminate\Database\Eloquent\Model::class,
...........
],
以及在Illuminate\Foundation\AliasLoader
类中注册的所有别名和facads
答案 1 :(得分:0)
1)use DB
与作为控制器的类无关,这正是Laravel提供对其他命名空间中的类的访问的方式。它的字面意思是“当从此文件(在名称空间中)引用DB
时,而不是在全局名称空间中引用DB
”。
2)用\
前缀一个类,使您可以通过再次从全局名称空间引用来使用绝对类名。如果愿意,可以使用它而不是顶部的use DB
,但是通常首选后者。全局名称空间只是存在-未明确放置在名称空间中的任何内容都将在此全局名称空间中。