依赖注入PHP容器和构造注入
我有一个简单的问题依赖注入PHP容器和构造注入,php,dependency-injection,Php,Dependency Injection,我有一个简单的问题 class controller{ $model; $view; $db; $array; public function __construct(Model $model, View $view, Database $db, Input $array){ $this->model = $model; $this->view = $view; $this->db= $db; $this->arra
class controller{
$model;
$view;
$db;
$array;
public function __construct(Model $model, View $view, Database $db, Input $array){
$this->model = $model;
$this->view = $view;
$this->db= $db;
$this->array = $array;
}
public function giveToModel{
$this->model->someFunction($this->view, $this->db , $this->array);
}
}
现在,我对编程有点陌生,所以我有几个问题。为了在编码中坚持某些原则,比如SOLID等等,DI是必须的。然而,对于如何在MVC框架中实现它,我有点不知所措。我只需要一些指针
至于上面的代码。我真的不确定那里的注射。是否需要通过构造函数注入所有这些内容。或者我应该通过函数“giveToModel”注入其中的一部分(View$View、Database$db、Input$array)
还有一个。我可以制作两个容器,例如:
class controllerDepen {
public function loadModel($name){
return new $name.'Model';
}
public function postArray(){
return new $postData; //object that gathers all the $_POST data into one array
}
}
另一个用于处理模型的依赖项,然后传递这些依赖项并使用它们设置依赖项
我的主要问题是:
正如您所看到的,关于这个主题,我可能需要一些额外的解释。一般的规则是,如果没有特定的依赖项,类实例将无法工作,那么该依赖项应该通过构造函数注入。如果一个类实例可以在没有依赖项的情况下使用,但可以使用一个对其有利的类实例,那么可以通过构造函数(默认值=null)或在构造后通过setter方法注入它。在这种情况下,这是一个判断调用,其中一个是可以接受的,有一些因素,比如“在消费类的生命周期中,依赖实例可以被替换为不同的实例吗?”帮助通知决策)好的,我明白了。只通过构造函数传递您必须传递的内容。然后再补充一下这个问题。如果我在MVC框架内工作,我是否需要在引导类中创建视图的实例,然后通过控制器将其传递给模型,还是在控制器中创建并发送给模型?在这种特殊情况下,我怀疑控制器指示需要哪个视图?如果是这样的话,那么最好在DI容器中设置一个工厂(Auryn支持这一点,我怀疑大多数其他DI框架也支持),以确定特定的控制器并用正确的视图构造它。在这种情况下,delegate()和prepare()功能可能都相关。嗯。它会自动启动(分解$url调用右控制器)->控制器->模型->视图。然而,如果我要坚持DI概念,我必须为模型提供一个“外部”视图的实例。那么,我是在引导中创建视图,然后将其发送到控制器,然后再发送到模型,还是在控制器中实现一个容器来“生成”实例,然后从那里发送它。这就是让我困惑的地方