Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:对于Mvc要有正确的认识, 他只是解决问题一种方案, 并不是万能的, 有一定的使用场景要求
1. 将课堂源代码, 全部写一遍, 在编辑器中写就可, 必须全部运行正确, 并加上自己理解的注释,不用手写
static:声明类中静态成员
<?php // static:声明类中静态成员 namespace static1; use PDO; class Db1 { /** * 添加类成员 * 在成员前面加static关键字 * */ // 静态属性 protected static $pdo; protected static $dsn = 'mysql:host=127.0.0.1;dbname=test'; protected static $username = 'root'; protected static $password = 'root'; // 静态方法 public static function connect() { // 在类中,访问静态成员使用self关键字加双冒号 self::$pdo = new PDO(self::$dsn, self::$username, self::$password); } public static function test() { // 调用connect方法连接数据库 self::connect(); // 返回结果集 return self::$pdo->query('select * from `goods`', PDO::FETCH_ASSOC); } } // 在类外部访问静态成员,可以使用类名加双冒号。 $result = Db1::test(); foreach ($result as $row) { echo '<pre>' . print_r($row, true) . '</pre>'; }
static: 后期静态绑定
<?php // static: 后期静态绑定 namespace static1; use PDO; class Db2 { // 2. 添加类成员 // 添加的静态成员: 属性, 方法 // 静态属性 protected static $pdo; protected static $dsn = 'mysql:host=127.0.0.1;dbname=test'; protected static $username = ''; protected static $password = ''; // 静态方法 public static function connect() { // 在类中访问当前类的静态成员: self:: static::$pdo = new PDO(static::$dsn, static::$username, static::$password); } // 测试方法 public static function test() { // 连接数据库 static::connect(); return self::$pdo->query('select * from `goods`', PDO::FETCH_ASSOC); } } class Test extends Db2 { // 重写父类中connect方法和属性 protected static $username = 'root'; protected static $password = 'root'; public static function connect() { self::$pdo = new PDO(self::$dsn, self::$username, self::$password); } } $result = Test::test(); foreach ($result as $row) { echo '<pre>' . print_r($row, true) . '</pre>'; }
mvc
<?php namespace mvc; //控制器,调用model方法,输出到vile // 1加载模型 require 'Model.php'; // 2加载视图 require 'View.php'; // 3创建控制器 class Controller1 { public function index() { // 实例化模型 $model = new Model(); // 获取model中的数据 $data = $model->getdata(); // 渲染数据 $view = new View(); //把从model获取的数据传给view中的fertch方法 return $view->fertch($data); } } // 4访问类成员 $controller = new Controller1(); //调用控制器中index方法,实现mvc echo $controller->index();
demo1
demo2
<?php // 依赖注入 // 吧模型和视图实例化分离出去。降低代码耦合度 namespace mvc; //控制器,调用model方法,输出到vile // 1加载模型 require 'Model.php'; // 2加载视图 require 'View.php'; // 3创建控制器 class Controller2 { // 在类中使用另外类的对象,需要函数参数方式把它注入到当前方法中, // 通过依赖注入,获取视图和模型的方法 public function index(Model $model, View $view) { // 获取model中的数据 $data = $model->getdata(); //把从model获取的数据传给view中的fertch方法 return $view->fertch($data); } } // 进行分离 // 实例化模型 $model = new Model(); // 渲染数据 $view = new View(); // 4访问类成员 $controller = new Controller2(); //调用控制器中index方法,实现mvc echo $controller->index($model, $view);
dome3
<?php // 依赖注入:将注入点改成构造方法 // 吧模型和视图实例化分离出去。降低代码耦合度 namespace mvc; //控制器,调用model方法,输出到vile // 1加载模型 require 'Model.php'; // 2加载视图 require 'View.php'; // 3创建控制器 class Controller3 { protected $model; protected $view; // 因为需要多次使用,所以需要把他们添加到构造方法中 public function __construct(Model $model, View $view) { $this->model = $model; $this->view = $view; } public function index() { // 获取model中的数据 $data = $this->model->getdata(); //把从model获取的数据传给view中的fertch方法 return $this->view->fertch($data); } } // 进行分离 // 实例化模型 $model = new Model(); // 渲染数据 $view = new View(); // 4访问类成员 $controller = new Controller3($model, $view); //调用控制器中index方法,实现mvc echo $controller->index();
demo4
<?php // 依赖注入:将注入点改成构造方法 // 把模型和视图实例化分离出去。降低代码耦合度 namespace mvc; //控制器,调用model方法,输出到vile // 服务容器层 class Container { // 创建容器属性 ,存放对象 protected $instance = []; // 将类的实例化绑定到容器中 public function bind($alias, \Closure $proecss) { // 将实例化的方法绑定到存储服务器中 $this->instance[$alias] = $proecss; } // 执行容器中的方法 public function make($alias, $proecss = []) { 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(); }); // 1加载模型 require 'Model.php'; // 2加载视图 require 'View.php'; // 3创建控制器 class Controller4 { public function index(Container $container) { // 获取model中的数据 $data = $container->make('model')->getdata(); //把从model获取的数据传给view中的fertch方法 return $container->make('view')->fertch($data); } } // 4访问类成员 $controller = new Controller4(); //调用控制器中index方法,实现mvc echo $controller->index($container);
demo5
2. 将最后一个demo5.php中的代码, 手写提交
总结
static:声明类中静态成员:
在声明类成员时前面加上static关键字,
访问静态方法不能使用实例访问,
在静态方法中不能访问动态成员。
因为静态成员属于类,静态成员的数据被所有类的对象所共享,
在类中访问静态成员可以使用self或者static加双冒号来访问,在类外使用类名加双冒号访问。
static: 后期静态绑定
使用在静态继承上下文环境中
使用static关键字调用方法时,它能判断出是父类调用还是子类调用。
后期绑定就是在类成员被调用的时候再动态的绑定, 也叫:延迟绑定
mvc:
M:模型(modesl)处理应用逻辑,对数据的操作。
V:视图(View)数据渲染。
C:控制器(Controller)调用modesl里的方法,吧数据传递给View