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

时间:2019-05-09 09:50:22

标签: php laravel oop

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

如果有人可以教我或给我很好的参考,那就太好了。

$class = app()->make(ClassA::class);

vs

$class = new ClassA();

1 个答案:

答案 0 :(得分:3)

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

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

后者只是您自己执行的简单对象实例化。

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

public function __construct(ClassB $classB) {}

然后使用第一种方法,Service容器将尝试为您解决ClassB,使用第二种方法,您就是需要提供这种依赖性的方法:

$class = new ClassA(new ClassB);

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