以这种方式实现依赖性注入的最佳方法是什么:
new App\Controllers\HomeController();
Class HomeController
use App\Views\HomeView;
class HomeController {
private $view;
public function __construct() {
$this->view = new HomeView();
或这种方式:
new App\Controllers\HomeController(new App\Views\HomeView());
答案 0 :(得分:0)
依赖项注入通常(如果不是总是)通过IoC
(控制反转)容器进行。容器,或者更确切地说,它是依赖注入逻辑,负责创建对象,并通过某种魔术来获取期望添加的所有参数,并从容器依赖注入逻辑中创建它们。
您正在做的只是创建新对象。您可以按照自己希望的方式进行操作,但是就我个人而言,我可能会将视图传递给构造函数。
如果您想了解有关依赖项注入和容器的更多信息,请参见wiki条目。
如果愿意,您还可以使用php反射here来看看我对依赖容器的幼稚实现!
答案 1 :(得分:0)
您提供的示例反映了完全不同的方法(我给班级的命名方式与您相同)
// App/Controllers/HomeController.php
use App\Views\HomeView;
class HomeController {
private $view;
public function __construct() {
$this->view = new HomeView();
}
}
这不是依赖项注入,您可以在类中创建您的类所依赖的东西。
比较:
// App/Controllers/HomeController.php
use App\Views\HomeView;
class HomeController {
private $view;
public function __construct(HomeView $view) {
$this->view = $view;
}
}
这实际上是依赖注入:在类的外部中创建您的类所需的任何东西,并通过构造函数将其传递给它(在这种情况下)。
根据您的情况,某些工具(依赖项注入容器)可能会或可能不会用于管理依赖项。
要获取更多详细信息,请参阅Martin Fowler的文章https://martinfowler.com/articles/injection.html,并在此处进行搜索-主题已被广泛涵盖(What is dependency injection?,What is Dependency Injection?,When to use Dependency Injection)