博客列表 >MVC与框架基础.1204

MVC与框架基础.1204

HTML基础标签
HTML基础标签原创
2019年12月06日 16:23:222883浏览

一、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基础原理 跟着老师明白了 一步步的包装 优化 简洁 过程

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

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

 


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议