Blogger Information
Blog 34
fans 1
comment 1
visits 40893
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
单例模式,工厂模式,MVC原理,写一个简单的MVC操作流程的案例——2019年8月6日作业22时02分
嘿哈的博客
Original
723 people have browsed it

常用的设计模式

1.单例模式,一个类仅允许被实例化一次;

主要应用与数据库连接,http请求

操作三步骤:

1.构造方法私有化

2.在当前类实例化并返回当前实例给调用者

3.禁用外部的clone方式创建新对象,将__clone 私有化

2.工厂模式

用于批量创建对象,适合一个类多个实例,工厂模式创建对象,一处修改,全局生效

操作步骤:

1.创建多个类,在创建一个工厂类

2.工厂类中创建一个函数,传入需要实例化类的名称和参数,用剩余参数

3.再return new $className(...$arguments);

4.调用则用Factory::create($className,$value);

MVC原理

M->Model模型,负责数据访问;

C->Controller 控制器,负责解析HTTP请求并转发和与模型、试图进行交互

V->View 负责生成HTML页面

效果:
0809.jpg

Model代码

<?php
//这是Model1.php文件

class Model1
{
    public $pdo = null;
    public function __construct()
    {
        $this->pdo = new \PDO('mysql:host=127.0.0.1;dbname=php','root','root');
    }

    public function getData()
    {
        $sql = 'SELECT `staff_id`, `name`,`age`,`position`  FROM `staff`';
        $stmt = $this->pdo-> prepare($sql);
        $stmt->execute();
        return $staffs = $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}

运行实例 »

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

View代码

<?php
//这是View1文件

class View1
{
    public function fetch($data)
    {
        $table = '<table border="1" width="800px">';
        $table .= '<caption>明星数据表</caption>';
        $table .= '<tr bgcolor="#f08080"><th>ID</th><th>姓名</th><th>年龄</th><th>职务</th></tr>';

        foreach ($data as $staffs)
        {
            $table .= '<tr>';
            $table .= '<th>'.$staffs['staff_id'].'</th>';
            $table .= '<th>'.$staffs['name'].'</th>';
            $table .= '<th>'.$staffs['age'].'</th>';
            $table .= '<th>'.$staffs['position'].'</th>';
            $table .= '</tr>';

        }

        $table .= '</table>';

        return $table;
    }
}

运行实例 »

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

Controller代码

<?php
//这是demo文件
require 'Model1.php';
require 'View1.php';

class Controller
{
    protected $view1;
    protected $model;

    public function __construct(Model1 $model1,View1 $view1)
    {
        $this->model1=$model1;
        $this->view1=$view1;
    }

    public function index()
    {
        $data = $this->model1->getData();

        return $this->view1->fetch($data);
    }
}

$model1 = new Model1();
$view1 = new View1();

$controller = new Controller($model1,$view1);
echo $controller->index();

运行实例 »

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

单例模式代码

<?php

namespace _0806;

class Demo1
{
    //构造函数
    private function __construct()
    {
        echo '我被调用了';
    }
    private static $instance = null;

    public static function getInstance()
    {
        if (is_null(self::$instance)){
             self::$instance = new self;
        }

        return self::$instance;
    }

    private function __clone()
    {
        echo '外部的clone方法被调用了';
    }
}

$obj1 = Demo1::getInstance();
//var_dump($obj1);
echo '<hr>';

//引用赋值
$obj2 = $obj1;
//var_dump($obj2);
//$obj2 = clone $obj1;

运行实例 »

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

工厂模式代码

<?php

namespace _0806;

class A
{
    public function __construct($arg1)
    {
        echo '对象创建成功,参数是'.$arg1;
    }
}
class B
{
    public function __construct($arg1,$arg2)
    {
        echo '对象创建成功,参数是'***plode(',',[$arg1,$arg2]);
    }
}
class C
{
    public function __construct($arg1,$arg2,$arg3)
   {
        echo '对象创建成功,参数是'***plode(',',[$arg1,$arg2,$arg3]);
    }
}
class D
{
    public function __construct()
    {
        echo '对象创建成功,无参数';
    }
}

class Factory
{
    public static function create($className,...$arguments)
{
    return new $className(...$arguments);
}
}

Factory::create(A::class,100);echo '<br>';
Factory::create(B::class,100,200);echo '<br>';
Factory::create(C::class,100,200,300);echo '<br>';
Factory::create(D::class);echo '<br>';

运行实例 »

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

Correction status:qualified

Teacher's comments:之前说过, 尽可能不要大段的抄课堂源码, 一个功能, 有不止一种实现方式, 不一定必须要和老师一样, 学了快一个月的php了, 应该有这个能力了, 前面的总结写得不错
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