别名的命名空间在哪里定义?

时间:2018-12-19 10:37:19

标签: laravel

假设我有一个像这样的控制器:

<?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”语句,它将起作用。我知道反斜杠意味着它将尝试在全局名称空间中查找数据库类。但是全局名称空间到底在哪里?

2 个答案:

答案 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,但是通常首选后者。全局名称空间只是存在-未明确放置在名称空间中的任何内容都将在此全局名称空间中。