Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:手画个图, 来辅助理解, 一个脚本不难, 难的是多个脚本之间的配合完成一个项目, 现在一个项目不可能只会用到一个php文件 , 都会有上百个php脚本的, 如果想做这行, 就得习惯全局思维
//门面
namespace _1204;
//加载模型
use mvc\Model;
use mvc\View;
require 'Model.php';
//加载视图
require 'View.php';
//创建容器
class Container5
{
//创建容器数组
protected $instance = [];
//放进去:将类实例化过程绑定到容器
//$alias:类实例别名
//$process:类的实例化过程 相当于 new Model()
//Closure闭包类型,闭包函数
public function bind($alias,\Closure $process){
$this->instance[$alias] = $process;
}
//取出来:执行容器中的实例方法
//$alias 为类名, $params = [] 就是实例化传的参数,相当于 new Model(a,b,c) 中的abc
public function make($alias,$params=[]){
return call_user_func_array($this->instance[$alias],[]);
}
}
//实例化容器
$container = new Container5();
//绑定数据
$container->bind('model',function (){return new Model();});
$container->bind('view',function (){return new View();});
class Facade
{
//接收实例化容器
protected static $container=null;
//存储数据
protected static $data;
// 用服务容器给它初始化
public static function initialize(Container5 $container){
static::$container = $container;
}
// 用静态代理方式将模型中的getData()静态化
public static function getData(){
static::$data = static::$container->make('model')->getData();
}
// 用静态代理方式将视图中的fetch()静态化
public static function fetch(){
return static::$container->make('view')->fetch(static::$data);
}
}
//创建控制器
class Controller5{
//初始化
public function __construct(Container5 $container)
{
Facade::initialize($container);
}
//创建方法
public function index(){
// 获取数据
Facade::getData();
//渲染模板
return Facade::fetch();
}
}
//客户端调用/访问类成员
$controller = new Controller5($container);
echo $controller->index();
视频看了几遍,看录播看老师的代码好像明白,但是自己写,很多细节地方又会懵,不知道这块为什么要这么写,又是调用了谁的方法,还得多看几遍,多理解。