批改状态:合格
老师批语:总结写得不错
<?phpnamespace _1204;use PDO;// static: 声明类中的静态成员// 1. 创建类class Db1{// 2. 添加类成员// 添加的静态成员: 属性, 方法// 静态属性//数据库连接对象protected static $pdo;//数据源protected static $dsn = 'mysql:host=127.0.0.1;dbname=mt';protected static $username = 'root';protected static $password = '111';// 静态方法//关键字staticpublic static function connect(){// 在类中访问当前类的静态成员: self::self::$pdo = new PDO(self::$dsn, self::$username, self::$password);}// 测试方法public static function select(){// 连接数据库//这是惰性连接,需要的时候连接self::connect();//直接调用了query()方法return self::$pdo->query('SELECT * FROM `user` LIMIT 5', PDO::FETCH_ASSOC);}}// 3. 访问类成员// 在类的外部,访问类中的静态成员, 直接用类名$result = Db1::select();//var_dump($result);foreach ($result as $row) {echo '<pre>' . print_r($row, true) . '</pre>';}

<?phpnamespace _1204;// static: 后期静态绑定// 使用场景 : 静态继承的上下文环境中// 类成员访问绑定时间: 在声明的时候绑定, 在调用的时候绑定// 后期绑定就是在类成员被调用的时候再动态的绑定, 也叫:延迟绑定use PDO;// static: 声明类中的静态成员// 1. 创建类class Db2{// 2. 添加类成员// 添加的静态成员: 属性, 方法// 静态属性protected static $pdo;protected static $dsn = 'mysql:host=127.0.0.1;dbname=mt';protected static $username = 'root';protected static $password = '112';// 静态方法public static function connect(){// 在类中访问当前类的静态成员: self::static::$pdo = new PDO(static::$dsn, static::$username, static::$password);}// 测试方法public static function select(){// 连接数据库static::connect();return self::$pdo->query('select * from `user` where uid>3' , PDO::FETCH_ASSOC);}}class Sub extends Db2{protected static $username = 'root';protected static $password = '111';public static function connect(){self::$pdo = new PDO(self::$dsn, self::$username, self::$password);}}// 3. 访问类成员// 在类的外部,访问类中的静态成员, 直接用类名$result = Sub::select();//本意是想用子类中的connect();foreach ($result as $row) {echo '<pre>' . print_r($row, true) . '</pre>';}

<?php// 控制器: 将商品信息表展示出来namespace mvc;// 1. 加载模型require 'Model.php';// 2. 加载视图require 'View.php';// 3. 创建控制器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;// 1. 加载模require 'Model.php';// 2. 加载视图require 'View.php';// 3. 创建控制器class Controller2{public function index(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;// 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(){// 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;//引用Closure别名use Closure;// 1. 加载模型require 'Model.php';// 2. 加载视图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. 创建控制器class Controller4{public function index(Container $container){// 3.1 获取数据$data = $container->make('model')->getData();// 3.2 渲染模板return $container->make('view')->fetch($data);}}// 4. 客户端调用/访问类成员// 将模型对象与视图对象,以参数的方式再次注入到控制器的方法$controller = new Controller4();echo $controller->index($container);







Model:用来操作数据表,与一张具体的数据表绑定
View:渲染页面,形成视图
Controller:有两个最基本的功能:获取数据和渲染页面
将注入点放在构造函数中,解决了数据共享问题
解决了对类的依赖的中的耦合问题
解决了在类外部对于类成员访问的规范,统一以静态方式访问,不管原来是什么方式。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号