博客列表 >设计模式与MVC初步—2018年9月7日23时45分

设计模式与MVC初步—2018年9月7日23时45分

感恩的心的博客
感恩的心的博客原创
2018年09月22日 17:37:20690浏览

 

1、编程: 单例模式


实例

<?php
echo '<pre>';
class Config1{}
$obj1=new Config1();
$obj2=new Config1();
var_dump($obj1,$obj2);
var_dump($obj1==$obj2);
echo '<hr>';

class Config{
    private static $instance=null;
    public $setting=[];
    //禁止从类的外部实例化对象
    private function __construct() {
        
    }
    //禁止克隆
    private function __clone() {
        
    }
    //外部睛允许通过一个公共静态方法创建实例
    public static function getInstance(){
        if(self::$instance ==null){
            self::$instance=new self();
        }
        return self::$instance;
    }
    
    //设置操作
    public function set(){
        $num= func_num_args();
        if($num<=0){
            echo '<span style="color:red">无参数</span>';
            return;
        }
        switch ($num){
            case 1:
                $value= func_get_args(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 '<span style="color:red">非法参数</span>';
        }
    }
    
    //get
    public function get($name=''){
        if(empty($name)){
            return $this->setting;
        }
        return $this->setting[$name];
    }
}


//$obj3=new Config();
//$obj4=new Config();
$obj3 = Config::getInstance();
$obj4 = Config::getInstance();
var_dump($obj3,$obj4);
var_dump($obj3===$obj4);

$obj3->set('host','127.0.0.1');
print_r($obj3->get());

echo '<hr>';
//test array
$config=['host'=>'Localhost','user'=>'root','password'=>'123'];
$obj4->set($config);
print_r($obj3->get());

运行实例 »

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

 


2、编程: MVC的实现原理

 (1)model


实例

<?php

//模型类

namespace mvc\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);
    }

}

运行实例 »

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


(2)view

实例

<?php
namespace mvc\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">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <style>
    table,th,td{
border:1px solid black; 
}
    </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;
        
    }
}

运行实例 »

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


(3)controllor

实例

<?php
namespace mvc\controllor;
use mvc\model\Model;
use mvc\view\View;

class Controllor{
    public function index(){
        require './model/Model.php';
        
        $model=new Model('php','root','root123');
        $model->select('staff',10);
        $result=$model->result;
        
        require './view/View.php';
        $view=new View($result);
        
        $data=$view->getData();
        
        $view->display($data);
    }
    
}

运行实例 »

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


3、问答: MVC的设计思想是什么?

在课堂上老师演示了这样一幅图

以下引自网络查找资料:

(1)mvc是一种软件架构的思想,将一个软件按照模型、视图、控制器进行划分。其中,模型用来封装业务逻辑,视图用来实现表示逻辑,控制器用来协调模型与视图(视图要通过控制器来调用模型,模型返回的处理结果也要先交给控制器,由控制器来选择合适的视图来显示 处理结果)。         

1)模型: 业务逻辑包含了业务数据的加工与处理以及相应的基础服务(为了保证业务逻辑能够正常进行的事务、安全、权限、日志等等的功能模块)         

2)视图:展现模型处理的结果;另外,还要提供相应的操作界面,方便用户使用。       

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

mvc.gif

(2)为什么要使用mvc        

1)使用mvc的思想来设计一个软件,最根本的原因是为了实现模型的复用:

 a,模型不用关心处理结果如何展现。 比如,模型返回一些数据,然后交给不同的视图来展现(表格的方式、图形的方式等等)。

 b,可以使用不同的视图来访问同一个模型。       

 2)代码的维护性更好

修改模型不会影响到视图,反过来,修改视图,也不会影响到模型。         

3)方便测试




 

 

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