批改状态:合格
老师批语:做为初学者, 能理解到这个层次很不错, 继续
//普通的MVC类class Controller1{public function index(){// 1. 获取数据$model = new Model;$data = $model->getData();// 2. 渲染模板/视图$view = new View;return $view->fetch($data);}}
实现依赖注入,那就必须把模型类和视图类移出控制器类外面。
//把外部对象实例化过程移到客户端处理,并以参数方式注入控制器类中class Controller2{//需要约束参数的类型(对象和数组作为参数是允许在参数前面加类型约束的)public function index(Model $model, View $view){// 1. 获取数据$data = $model->getData();// 2. 渲染模板/视图return $view->fetch($data);}public function index2(Model $model, View $view){}}// 客户端$model = new Model;$view = new View;// 实例化控制器类$controller = new Controller2;echo $controller->index($model, $view);
class Controller3{// 依赖对象属性private $model;private $view;// 构造方法public function __construct(Model $model, View $view){// $model = new Model;// $data = $model->getData();$this->model = $model;$this->view = $view;}public function index(){// 1. 获取数据$data = $this->model->getData();// 2. 渲染模板/视图return $this->view->fetch($data);}public function index2(){// 1. 获取数据$data = $this->model->getData();// 2. 渲染模板/视图return $this->view->fetch($data);}}// 客户端$model = new Model;$view = new View;// 实例化控制器类$controller = new Controller3($model, $view);echo $controller->index();
如果你还不了解构造方法,那在这里说明一下:构造方法也就是函数或类的初始化,也称为赋值过程。
实现了对象的共享,实际上这也不完美。实际上还有更好的方法—–服务容器,服务容器被很多大型 PHP 框架推崇,所有类的实例化过程都用服务容器进行管理。服务容器即管理所有对象,也管理着对象之间的依赖关系。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号