博客列表 >mvc模式与单例模式-2018-09-07

mvc模式与单例模式-2018-09-07

theYon的博客
theYon的博客原创
2018年09月11日 23:08:32677浏览

mvc模式与单例模式

主要知识点

1)单例模式

2)工厂模式

3)mvc(模型-视图-控制器)

MVC的设计思想是什么?

* M(model) - 数据模型层

* 业务逻辑包含了业务数据的加工与处理以及相应的基础服务

* C(controller) - 控制层

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

* V(view) - 视图层

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

mvcPic.png

代码

单例模式

<?php
// 单例模式
class Config
{
    private static $instance;

    public $setting = [];

    // 禁止从类的外部实例化对象
    private function __construct()
    {

    }

    //克隆方法也私有化
    private function __clone()
    {
        echo"对象已被克隆";
    }

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

    public function setArg()
    {
        // 数组
        // $num = func_get_args();
        // return $num;
        // 个数
        $num = func_num_args();
        // return $num;

        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 '<p style="color:red">非法参数</p>';
            }
        } else{
            echo '<p style="color:red">没有参数</p>';
        }

    }

    public function getArg($name = '')
    {
        if(empty($name)) {
            return $this->setting;
        }
        return $this->setting[$name];
    }
}

$obj1 = Config::getInstance();
$obj2 = Config::getInstance();
var_dump($obj1, $obj2); // true
echo '<hr>';
var_dump($obj1 === $obj2);
echo '<hr>';
// $obj3 = clone $obj1;
// var_dump($obj1 === $obj3);
// echo '<hr>';

// array(3) { [0]=> string(9) "波斯猫" [1]=> string(9) "喵喵怪" [2]=> string(6) "埃及" }
// var_dump($obj1->setArg('波斯猫','喵喵怪','埃及'));

echo $obj1->setArg('nickName','喵喵怪');

echo var_dump($obj1->getArg());
echo '<hr>';
echo $obj1->getArg('nickName');

$config = ['host'=>'localhost','user'=>'root','pass'=>'123456'];
$obj1->setArg($config);
echo '<hr>';
print_r($obj1->getArg());

模拟MVC模式

model.php

<?php

namespace mvc\model;

class Model
{
    private $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);
        return $this->result;
    }

}

view.php

<?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><head>    
 <meta charset="UTF-8">    
 <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;   
   }
   }

controller.php

<?php

namespace mvc\controller;
use mvc\model\Model;
use mvc\view\View;

class controller
{
    public function index(){
        require './model/Model.php';
        $model = new Model('php','root','root');
        $result = $model->select('staff',4);
        // return $result;

        require './view/View.php';
        $view = new View($result);
        $data = $view->getData();
        $view->display($data);
    }
}

index.php

<?php

require './controller/Controller.php';
use mvc\controller\Controller;

$runIt = new Controller();

$runIt->index();

运行结果

微信截图_20180911230751.png

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