登录  /  注册
博主信息
博文 37
粉丝 0
评论 0
访问量 31342
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
设计模式:单例模式,工厂模式,注册树,mvc的实现原理--2018年9月10日13时35分
新竹网络_Terry的博客
原创
733人浏览过

这一节课主要讲设计模式和mvc,主要内容是设计模式:单例模式,工厂模式,注册树,mvc的实现原理

代码

实例

<?php
class Congig
{
    private static $instance=null;
    //配置参数容器
    public $setting=[];
    //禁止从类的外部实例化对象
    public function __construct()
    {
    }
    //克隆方法也有私有化
    private function __clone()
    {

    }
    //外部仅允许通过一个公共静态方法来创建实例
    public static function getInstance()
    {//检测当前的属性$instance是否已经保存了当前类的实例
        if(self::$instance==null){
            self::$instance=new self();
        }
        //如果已经存在当前类的实例,返回当前类的实例
        return self::$instance;
    }
    //配置项的设置操作
    public function set()
    {
        //获取参数的数量
        $num=func_num_args();
        if($num>0){
            switch ($num){
                case 1: //如果只有一个参数,说明这是一个数组
                    $value=func_get_arg(0);
                    if(is_array($value)){
                        $this->setting=array_merge($this->setting,$value);
                    }
                     break;
                case 2:
                    $name=func_get_arg(0);
                    $value=func_get_arg(1);
                    $this->setting[$name]=$value;
                    break;
                default:
                    echo'没有参数';

            }
        }else{
            echo'非法参数';
        }
    }
    //获取参数:当无参数的时候,默认获取全部参数
    public function get($name=''){
        if (empty($name)){
            return $this->setting;
        }
        return $this->setting[$name];
    }
}
$obj1=Congig::getInstance();
$obj2=Congig::getInstance();
$config=['host'=>'127.0.0.1','user'=>'root','pass'=>'5201314'];
$obj1->set($config);
print_r($obj1->get());

运行实例 »

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

预览图

@3%FX@XLXVL@O%%T7RF866A.png

代码


实例

<?php
//模型类

namespace model\model;


class Model
{
    public $pdo = null;
    //连接数据库
    public $result = [];
    public function __construct($dbname, $user, $pass)
    {
        $this->pdo = new \PDO('mysql:host=127.0.0.1;dbname='.$dbname, $user, $pass);
    }

    //查询
    public function select($table, $num)
    {
        //创建预处理对象
        $stmt = $this->pdo->prepare("SELECT `staff_id`,`name`,`age`,`salary` FROM {$table} LIMIT :num");
        //执行查询
        $stmt->bindValue(':num', $num, \PDO::PARAM_INT);
        $stmt->execute();

        $this->result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
    }
}

运行实例 »

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

实例

<?php


namespace model\view;


class View
{
    public $data = [];
    //模板赋值
    public function __construct($data)
    {
        $this->data = $data;
    }

    //获取数据
    public function getData()
    {
        return $this->data;
    }

    //渲染模板
    public function display($data)
    {
        $table = '<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    
    <style>
        table,th,td {
            border: 1px solid black;
        }
        table {
            border-collapse: collapse;  /*折叠表格线*/
            width: 600px;
            margin: 30px auto;
            text-align: center;
            padding: 5px;
        }

        table tr:first-child {
            background-color: lightgreen;
        }
        table caption {
            font-size: 1.5em;
            margin-bottom: 15px;
        }
    </style>
    <title>MVC简介</title>
</head>
<body>
    <table>
        <caption>员工信息表</caption>
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>年龄</th>
            <th>工资</th>
        </tr>';

        foreach ($data as $staff) {
            $table .= '<tr>';
            $table .= '<td>'.$staff['staff_id'].'</td>';
            $table .= '<td>'.$staff['name'].'</td>';
            $table .= '<td>'.$staff['age'].'</td>';
            $table .= '<td>'.$staff['salary'].'</td>';
            $table .= '</tr>';
        }
        $table .= '</table></body></html>';
        echo $table;
    }
}

运行实例 »

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

实例

<?php
namespace model\controller;
use model\model\Model;
use model\view\View;
class Controller
{
    public function index()
    {
        require './model/Model.php';

        $model = new Model('php','root','5201314');
        $model->select('staff', 10);
        $result = $model->result;


        require './view/View.php';

        $view = new View($result);

        $data = $view->getData();

        $view->display($data);
    }
}

运行实例 »

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

实例

<?php
require './controller/Controller.php';
use model\controller\Controller;
$controller=new Controller;
$controller->index();

运行实例 »

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

预览图

90FUA0[TW~BADV~`DIQKG1R.png

MVC的设计思想是什么?

 mvc是一种软件架构的思想,将一个软件按照模型、视图、控制器进行划分。其中,模型用来封装业务逻辑,视图用来实现表示逻辑,控制器用来协调模型与视图(视图要通过控制器来调用模型,模型返回的处理结果也要先交给控制器,由控制器来选择合适的视图来显示 处理结果)。
        1)模型: 业务逻辑包含了业务数据的加工与处理以及相应的基础服务
        2)视图:展现模型处理的结果;另外,还要提供相应的操作界面,方便用户使用。                                                      

        3)控制器:视图发请求给控制器,由控制器来选择相应的模型来处理;模型返回的结果给控制器,由控制器选择合适的视图。

总结

1、设计模式:单例模式,工厂模式,注册树,单例模式: 一个类仅允许被实例化一次,工厂模式: 不用用new ,而用函数/类方法批量创建对象,注册树: 就是创建一个对象集合/对象池/对象树,对象容器来存储对象

2、使用mvc的思想来设计一个软件,最根本的原因是为了实现模型的复用,代码的维护性更好,方便测试,但是使用mvc,会增加代码量、相应地也会增加软件开发的成文,设计的难度也会增加。

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学