Blogger Information
Blog 16
fans 0
comment 0
visits 16969
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
MVC与框架基础.1204
HTML基础标签
Original
2884 people have browsed it

一、static:后期静态绑定

1575618657836541.jpg

<?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基础

商品信息表.JPG

<?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();

运行实例 »

点击 "运行实例" 按钮查看在线实例

手抄:

1575619244153048.jpg1575619307238404.jpg1575619334974614.jpg

1575619362400867.jpg

总结:

       学习了类中静态成员 static,它能声明 能后期静态绑定.

学习了 MVC基础原理 跟着老师明白了 一步步的包装 优化 简洁 过程

明白了 类之间都是相互交织关联的 彼此合作的 它们的结合就像一个个

工厂  有条有序执行并快捷的完成任务.

 


Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:能跟上思想, 理解原理, 已经不容易了, 加油
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post