批改状态:合格
老师批语:总结的不错, 其实就是一步步的简化代码,将更多的内容包装起来, 对外提供一个更加简单的调用接口

<?php//控制器,将商品信息展示出来namespace mvc;//MVC基本套路//1.加载模型 **M**require 'Model.php';//2.加载视图 **V**require 'View.php';//3.创建控制器**C**class Controller1{public function index(){//3.1获取数据$model=new Model();$data=$model->getData();//3.2渲染模板$view=new View();return $view->fetch($data);}}//4.客户端调用/访问类成员$controller = new Controller1();echo $controller->index();
<?php//控制器,将商品信息展示出来//将类中对其他类的实例化,模型/视图分类出来,降低耦合度//依赖注入namespace mvc;//MVC基本套路//1.加载模型 **M**require 'Model.php';//2.加载视图 **V**require 'View.php';//3.创建控制器**C**class Controller2{public function index(Model $model,View $view){//php现在已经支持类型定义了$model是Model 类的实例,$view是View类的对象,记着依赖注入的这种写法☆☆☆☆☆☆//3.1获取数据$data=$model->getData();//3.2渲染模板return $view->fetch($data);}}//4.客户端调用/访问类成员//将模型与视图的实例化代码从控制器分离出来,把实例化代码放到客户端$model=new Model();$view=new View();//将模型对象与视图对象,以参数的方式再次注入放到控制器的方法$controller = new Controller2();echo $controller->index($model,$view);
<?php//控制器,将商品信息展示出来//将类中对其他类的实例化,模型/视图分类出来,降低耦合度//依赖注入:将注入点该到控制器的构造方法中namespace mvc;//MVC基本套路//1.加载模型 **M**require 'Model.php';//2.加载视图 **V**require 'View.php';//3.创建控制器**C**class Controller3{protected $model;protected $view;//构造方法,注入点改到了构造方法中,实现了模型与视图对象的共享public function __construct(Model $model,View $view){$this->model=$model;$this->view=$view;}public function index(){//php现在已经支持类型定义了$model是Model 类的实例,$view是View类的对象,记着依赖注入的这种写法☆☆☆☆☆☆//3.1获取数据$data=$this->model-> getData();//3.2渲染模板return $this->view->fetch($data);}}//4.客户端调用/访问类成员//将模型与视图的实例化代码从控制器分离出来,把实例化代码放到客户端$model=new Model();$view=new View();//将模型对象与视图对象,以参数的方式再次注入放到控制器的方法$controller = new Controller3($model,$view); //参数不再放在普通方法中而是构造方法中echo $controller->index();
<?php//控制器,将商品信息展示出来//将类中对其他类的实例化,模型/视图分类出来,降低耦合度//依赖注入:将注入点该到控制器的构造方法中namespace mvc;//MVC基本套路//1.加载模型 **M**require 'Model.php';//2.加载视图 **V**require 'View.php';//添加一个服务容器层class Container{//先创建个容器属性放对象,其实就是一个数组,里面全是创建对象的方法protected $instance=[];//1.放进去:将类的实例化过程绑定到容器中//$alias:当前类实例的别名,会作为关联数组的键名public function bind($alias,\Closure $process){//将类实例化的方法绑定/存储到服务容器中$this->instance[$alias]=$process;}//2.取出来:执行容器中的实例方法public function make($alias,$params=[]){return call_user_func_array($this->instance[$alias],[]);}}//实例化容器$container = new Container();//用到模型对象 ,视图对象,将他们绑定到容器中。$container->bind('model',function (){return new Model();});$container->bind('view',function (){return new View();});/***************************************************************///3.创建控制器**C**class Controller4{public function index(Container $container){// 对象已经注入到容器里面了,这里只要注入容器就行//php现在已经支持类型定义了$model是Model 类的实例,$view是View类的对象,记着依赖注入的这种写法☆☆☆☆☆☆//3.1获取数据$data=$container->make('model')-> getData();//3.2渲染模板return $container->make('view')->fetch($data);}}//4.客户端调用/访问类成员//将模型对象与视图对象,以参数的方式再次注入放到控制器的方法$controller = new Controller4(); //参数不再放在普通方法中而是构造方法中echo $controller->index( $container);





解耦,降低耦合度
避免在一个类中new 一个实例对象,尽可能用参数注入的方式
注入点就是把参数放到不同的方法中,就是参数列表,参数写哪个方法里,哪里就是注入点
class Controller2{public function index(Model $model,View $view){//php现在已经支持类型定义了$model是Model 类的实例,$view是View类的对象 记着依赖注入的这种写法☆☆☆☆☆☆
普通方法注入-》适用一次性的情况
构造方法注入-》多次、共享属性
服务容器,统一管理,容器有两个基本功能:
0.先添加一个容器层,创建个容器属性放对象,其实就是一个数组,里面全是创建对象的方法 protected $instance=[];
1.放进来(绑定)将类的实例化过程绑定/存储到服务容器中
public function bind($alias,\Closure $process)
第二个参数是闭包类的代码,就是相当于new的过程
$this->instance[$alias]=$process;
$this->数组【键名(对象)】=值(闭包函数)
2.取出去 执行容器中的实例方法
```php
…
public function make($alias,$params=[]){
return call_user_func_array($this->instance[$alias],[]);
}
}
//实例化容器
$container = new Container();
//用到模型对象 ,视图对象,将他们绑定到容器中。
$container->bind(‘model’,function (){return new Model();});
$container->bind(‘view’,function (){return new View();});
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号