首页 > 解决方案 > 为什么别名在 Laravel 的末尾使用 ::class

问题描述

大家好,我是初学者 Laravel 开发人员,想问一下为什么 Laravel 中的别名在 eaxmple 的末尾使用 ::class:'DB' => Illuminate\Support\Facades\DB::class,也就是说,我知道 ::class 意味着它将以字符串格式返回类的完全限定名称。好吧,这是否意味着如果我使用 DB::insert() 那么它将等价于 Illuminate\Support\Facades\DB::insert()。因此, ::class 的使用意味着我不必编写类的完全限定名。

标签: phplaravel

解决方案


\DB::insert相当于调用\Illuminate\Support\Facades\DB::insert(),但不是因为::class语法。

如果输入的行是一个字符串,它也可以工作aliases,这些都是一样的:

use Illuminate\Support\Facades\DB as DBFacade;

    'DB' => 'Illuminate\Support\Facades\DB', // (string) Illuminate\Support\Facades\DB
    'DB' => \Illuminate\Support\Facades\DB::class, // (string) Illuminate\Support\Facades\DB
    'DB' => DBFacade::class, // (string) Illuminate\Support\Facades\DB

::class只是一个方便的功能,看到这个答案有两个原因,它很有帮助。

您可以调用“别名”名称(没有命名空间)的真正原因是因为 Laravel 向自动加载器添加了一个方法,如果使用 PHP 或自动生成的存根类请求其别名,则该方法将加载该类,基于配置文件中的数组。class_aliasaliases


推荐阅读