Laravel app->make(ClassA) class 和 new ClassA() 有什么区别

Dee*_*tha 1 php oop laravel

我需要知道以下方法之间有什么区别,以及每种方法的主要目标或特点是什么?

如果有人可以教我这方面的知识或给我一个很好的参考以供参考,那就太好了。

$class = app()->make(ClassA::class);
Run Code Online (Sandbox Code Playgroud)

对比

$class = new ClassA();
Run Code Online (Sandbox Code Playgroud)

nak*_*kov 5

这是一个大问题,我认为在 StackOverflow 的答案中不容易解释。

但总而言之,第一种方法使用所谓的依赖注入技术。Laravel 中的服务容器是解决框架依赖关系的。因此,例如,如果您的类依赖于运行时可用的其他资源,则服务容器将负责提供这些资源。

后者只是您自己完成的普通对象实例化。

例如,您ClassA在构造函数中有对另一个类的依赖:

public function __construct(ClassB $classB) {}
Run Code Online (Sandbox Code Playgroud)

然后使用第一种方法,Service 容器将尝试为您解析 ClassB,使用第二种方法,您需要像这样提供依赖项:

$class = new ClassA(new ClassB);
Run Code Online (Sandbox Code Playgroud)

我希望这能澄清一点,尽管正如我所提到的,这是一个大问题。

  • 您可以浏览文档,我在上面给您的链接单击服务提供商以阅读更多信息。Laravel Up & running 也是一个很好的资源。这是马特·斯托弗 (Matt Stauffer) 的作品 (2认同)