Blogger Information
Blog 34
fans 1
comment 0
visits 23156
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
mvc模式与单例模式-2018-09-07
theYon的博客
Original
678 people have browsed it

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

Correction status:qualified

Teacher's comments:
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