Blogger Information
Blog 34
fans 0
comment 1
visits 23290
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
设计模式与MVC初步—2018年9月7日23时45分
感恩的心的博客
Original
691 people have browsed it

 

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)方便测试




 

 

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
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!