我是编码新手,我正在学习MVC。
你能解释一下这个简单的代码吗?
model.php
<?php
class Model
{
public $string;
public function __construct()
{
$this->string = "MVC + PHP = Awesome!";
}
}
View.php
<?php
class View
{
private $model;
private $controller;
public function __construct($controller,$model)
{
$this->controller = $controller;
$this->model = $model;
}
public function output()
{
return "<p>" . $this->model->string . "</p>";
}
}
Controller.php这样
<?php
class Controller
{
private $model;
public function __construct($model)
{
$this->model = $model;
}
}
答案 0 :(得分:2)
控制器是MVC应用程序的传输层。这意味着,控制器从请求(HTTP或CLI)检索数据,然后将数据(如果有的话)交给一个知道应用程序业务逻辑的类,该逻辑最简单的形式是模型。模型执行其逻辑并将其结果返回给控制器。然后,控制器将数据移交给视图文件以表示它。所以,简而言之:
所谓的“MVC框架”旨在为开发人员提供此类编排所需的工具。我强烈建议您研究这样的框架,而不是自己编写。
你会看到很多这些图表;如果您已经了解MVC的工作原理,它们才有意义。
因此,从理论上讲,我们知道控制器需要与一个或多个模型类交互作为其依赖关系。但是我们如何实现这一目标呢?一种方法是利用class properties来保存所需模型的实例。因此,控制器可以像$this->model->whatever
一样轻松访问它们。
您需要了解的另一个流行概念是Dependency Injection。这是一种设计模式,就像名称所说的那样。简单来说,您可以通过构造函数(称为构造函数注入)或通过其setter方法(称为setter注入)注入类依赖项。如果使用正确,它会使类与其依赖关系松散耦合,因为它们可能从外部注入。
现在你已经了解了MVC和DI的基本概念,让我们再看一下你的代码:
<?php
class Controller
{
// Designate a place to hold class dependencies
private $model;
// Accept a $model instance in the constructor, so the
// dependencies can be injected from the outside
public function __construct($model)
{
// Set the dependency in a class property, so it's easily
// accessible for later use of class methods.
$this->model = $model;
}
}
答案 1 :(得分:1)
以下示例演示了$ this-&gt; var = $ var的工作方式。 我们可以看到,我们将2个不同的模型传递给视图。
class Model
{
public $string;
public function __construct($string = NULL)
{
if(!empty($string)){
$this->string = "DEFINIETLY AWESOME";
} else {
$this->string = "MVC + PHP = Awesome!";
}
}
}
class View
{
private $model;
private $controller;
public function __construct($controller,$model)
{
$this->controller = $controller;
$this->model = $model;
}
public function output()
{
return "<p>" . $this->model->string . "</p>";
}
}
class Controller
{
private $model;
public function __construct($model)
{
$this->model = $model;
}
}
$model = new Model();
$controller = new Controller($model);
$view = new View($controller, $model);
echo $view->output();
// MVC + PHP = Awesome!
$model = new Model("a");
$controller = new Controller($model);
$view = new View($controller, $model);
echo $view->output();
// DEFINIETLY AWESOME
但是,从MVC的角度来看:我们不需要将$ controller传递给View。
class Model
{
public $text;
public function __construct()
{
$this->text = 'Hello world!';
}
}
class View
{
private $model;
public function __construct(Model $model)
{
$this->model = $model;
}
public function output()
{
return '<h1>' . $this->model->text .'</h1>';
}
}
class Controller
{
private $model;
public function __construct(Model $model)
{
$this->model = $model;
}
}
//initiate the triad
$model = new Model();
//It is important that the controller and the view share the model
$controller = new Controller($model);
$view = new View($model);
echo $view->output();