Laravel的"app"方法和"new"关键字有什么区别



我发现一些开发人员在Laravel中使用app(SomeService::class);,而另一些则使用new SomeService();?它们之间有什么区别吗?

请检查https://laravel.com/docs/5.7/providers.

简单地说,如果你想自定义你将在运行时使用的类,你可以在提供者中更改它(使它成为单例或传递一些参数(,并通过$app进入运行时(如果你没有机会使用DI(。但当您制作对象vienew时,它只会创建一个实例。

假设我们有一个类A,它在构造中接收2个配置参数。

所以你需要到处打new A($param1,$param2)。但是使用提供者u可以使用DI来获得具有已经传递的参数的类A的实例,或者如果u没有机会使用DI则使用$app

是的,主要区别在于ServiceContainer

如果使用app(YourService::class)实例化,则ServiceContainer将使用reflection在类constructor中注入所需的依赖项。

因此,您不必显式显示use所需的所有依赖项。

这里解释得很好。

最新更新