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

自 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语法?

阅读 9.7k
3 个回答

这个是类型 App\Http\Kernel,是一个类的对象类型;

这个是类的类名字符串 AppHttpKernel::class,是字符串。

这个问题你先理解 Laravel 的容器概念了来。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题