Laravel源码里面为什么要用::class语法?

来源:互联网 发布:超凡战队 知乎 编辑:程序博客网 时间:2024/06/07 17:03

源问题:https://www.zhihu.com/question/52656676

自 PHP 5.5 起,关键词 class 也可用于类名的解析。使用 ClassName::class 你可以获取一个字符串,包含了类 ClassName 的完全限定名称。这对使用了 命名空间 的类尤其有用。

$app->singleton(        Illuminate\Contracts\Http\Kernel::class,        App\Http\Kernel::class    );        $app->singleton(        Illuminate\Contracts\Console\Kernel::class,        App\Console\Kernel::class    );        $app->singleton(        Illuminate\Contracts\Debug\ExceptionHandler::class,        App\Exceptions\Handler::class    );
这段bootstrap/app.php代码中既然已经写了类的完全限定名,为什么还要用::class语法?

解释:

因为 ::class 表示是字符串。此处代码等同于:

$app->singleton(        'Illuminate\Contracts\Http\Kernel',        'App\Http\Kernel'    );        $app->singleton(        'Illuminate\Contracts\Console\Kernel',        'App\Console\Kernel'    );        $app->singleton(        'Illuminate\Contracts\Debug\ExceptionHandler',        'App\Exceptions\Handler'    );

用 ::class 的好处在于 IDE 里面可以直接改名一个 class,然后 IDE 自动处理相关引用。
同时,PHP 执行相关代码时,是不会先加载相关 class 的。
同理,代码自动化检查 inspect 也可以正确识别 class。



阅读全文
0 0