博客列表 >MVC与框架基础-2019年12月4日

MVC与框架基础-2019年12月4日

古城老巷丶
古城老巷丶原创
2019年12月06日 16:50:14785浏览

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>';
}
image.png

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>';
}

image.png


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

image.png

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);
image.png

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

image.png

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);
image.png

demo5

image.png





2. 将最后一个demo5.php中的代码, 手写提交
image.png


总结

static:声明类中静态成员:

在声明类成员时前面加上static关键字,

访问静态方法不能使用实例访问,

在静态方法中不能访问动态成员。

因为静态成员属于类,静态成员的数据被所有类的对象所共享,

在类中访问静态成员可以使用self或者static加双冒号来访问,在类外使用类名加双冒号访问。

static: 后期静态绑定

使用在静态继承上下文环境中

使用static关键字调用方法时,它能判断出是父类调用还是子类调用。

后期绑定就是在类成员被调用的时候再动态的绑定, 也叫:延迟绑定

mvc:

M:模型(modesl)处理应用逻辑,对数据的操作。

V:视图(View)数据渲染。

C:控制器(Controller)调用modesl里的方法,吧数据传递给View




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