You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中仅用app(FQCN)即可创建服务吗?需额外注册步骤吗?

Laravel 服务容器使用说明

关于app(Filter::class)的作用

你猜的没错,app(Filter::class)是从Laravel的服务容器中获取类实例。默认情况下,它会根据类的构造方法自动解析依赖并创建实例——注意:默认不是单例,每次调用都会生成新实例;如果需要单例,得手动配置绑定。

是否需要额外注册服务?

和Symfony必须手动注册服务不同,Laravel的核心特性之一就是自动服务解析,满足以下条件的类,完全不用手动注册就能通过app()获取实例:

  • 是普通的可实例化PHP类(非接口、抽象类)
  • 构造方法的所有依赖都是能被容器自动解析的(比如其他普通类,或已绑定到容器的接口实现)

只有遇到以下场景时,才需要手动注册服务:

  • 要将接口绑定到具体实现(比如让容器解析FilterInterface时返回ConcreteFilter实例)
  • 需要将类设置为单例(确保每次获取的都是同一个实例)
  • 类的构造方法包含无法自动解析的参数(比如固定字符串、数值,需要手动传入)

手动注册的操作都在app/Providers目录下的服务提供者类里完成,比如AppServiceProvider的register方法:

public function register()
{
    // 绑定单例
    $this->app->singleton(Filter::class, function ($app) {
        return new Filter($app->make(DependencyClass::class));
    });

    // 接口绑定到实现类
    $this->app->bind(FilterInterface::class, Filter::class);
}

关于app.config文件的问题

你看到的旧教程里的app.config是Laravel早期版本的配置方式,现在的新版本已经完全移除了这个文件。所有服务绑定、容器相关的配置,都统一放在app/Providers下的服务提供者类中处理,这是当前Laravel的标准做法。

内容的提问来源于stack exchange,提问作者Viscountess of the Junkyard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 11:37:35