一、static:后期静态绑定
<?php namespace Sta; ##static:后期静态绑定 //使用场景: 静态继承的上下文环境中 子继父灵活动态绑定 也叫延迟绑定 use PDO; ##static:声明类中静态成员 #1.创建类 class Db2 { #2.添加类成员 //添加类成员: 属性 方法 //添加属性 protected static $pdo; protected static $dsn = 'mysql:host=127.0.0.1;dbname=list';//等于左右无空格 不然报错 protected static $username = 'root'; protected static $password = 'rootroot'; //添加静态方法 public static function connect() { //在类中访问当前类的静态成员:self:: self::$pdo = new PDO(self::$dsn, self::$username, self::$password); } //测试方法 public static function select() { //连接数据库 将self改成static 使子类接入 static::connect(); return self::$pdo->query('SELECT * FROM `mov_list`', PDO::FETCH_ASSOC); //PDO::FETCH_ASSOC将对应结果集中的每一行作为一个由列名索引的数组返回 } } class Sub extends Db2 { protected static $username = 'root'; protected static $password = 'rootroot'; public static function connect() { //在类中访问当前类的静态成员:self:: self::$pdo = new PDO(self::$dsn, self::$username, self::$password); } } #3.访问类成员 //在类的外部 访问类中的静态成员 直接用类名 $result = Sub::select(); foreach ($result as $row) { echo '<pre>' . print_r($row, true) . '</pre>'; }
运行实例 »
点击 "运行实例" 按钮查看在线实例
二、MVC基础
<?php namespace MVC; require 'Model.php'; //1.加载模型 require 'View.php'; //2.加载视图 ##添加服务容层################################################### class Container { //容器属性就是一个数组 里面全是创建对象的方法 protected $instance = []; //1.放进去:将类的实例化过程绑定到容器中 $alias:类实例的别名 public function bind($alias, \Closure $process) { //将类的实例化的方法绑定/储存到服务容器中 $this->instance[$alias] = $process; //楼上简想如同$this->instance['model'] = 'new Model(参数)'; } //2.取出来:执行容器中的实例方法 public function make($alias, $params = []) { return call_user_func_array($this->instance[$alias], []); //call_user_func_array —调用回调函数,并把一个数组参数作为回调函数的参数 } } //实例化容器 $container = new Container(); //用到模型对象 视图对象 将他们绑定到容器中 $container->bind('model', function () { return new Model(); }); $container->bind('view', function () { return new View(); }); ################################################################## ##添加Facade门面################################################### //Facade技术: 规范/统一了对外部对象的调用方式 全部改为静态调用 不管之前的方法是什么类型 class Facade { //增加属性 为了多次使用 protected static $container = null; protected static $data = []; public static function initialize($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 //3.创建控制器 { public function __construct($container) { //调用Facade里面的初始化方法 Facade::initialize($container); } public function index() { Facade::getData(); //3.1获取数据 return Facade::fetch(); //3.2渲染模板 } } //4.客户端调用/访问类成员 //将模型对象与视图对象 以参数的方式再次注入到控制器的方法中 $controller = new Controller5($container); echo $controller->index();
运行实例 »
点击 "运行实例" 按钮查看在线实例
手抄:
总结:
学习了类中静态成员 static,它能声明 能后期静态绑定.
学习了 MVC基础原理 跟着老师明白了 一步步的包装 优化 简洁 过程
明白了 类之间都是相互交织关联的 彼此合作的 它们的结合就像一个个
工厂 有条有序执行并快捷的完成任务.