Blogger Information
Blog 27
fans 0
comment 0
visits 20823
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
MVC与框架基础-2019年12月4日
古城老巷丶
Original
784 people have browsed it

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




Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:对于Mvc要有正确的认识, 他只是解决问题一种方案, 并不是万能的, 有一定的使用场景要求
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