我发现一些开发人员在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
所需的所有依赖项。
这里解释得很好。