博客列表 >单例模式+MVC的实现原理+MVC的设计思想

单例模式+MVC的实现原理+MVC的设计思想

Belifforz的博客
Belifforz的博客原创
2018年09月10日 14:22:41730浏览
  1. 单例模式

实例

<?php
/**
 * 单例模式:一个类仅允许被实例化一次
 * 1.一个站点仅需要创建一个数据库连接
 * 2.一个站点只需要一个配置类
 */

//创建一个使用的配置类
class config
{
    /**
     *为什么要用静态?因为静态属性属于类的,可以被所有类实例所共享
     * 为什么要能实例初始化为null,便于检测是否已经实例化
     */

    private static $instance = null;
    public $setting = [];

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

    }
    //防止克隆
    private function __clone()
    {
        // TODO: Implement __clone() method.
    }

    public static function getInstance()
    {
        if(self::$instance ==null)
        {
            self::$instance = new self();
        }
        //如果存在,直接返回
        return self::$instance;
    }

    //配置项的设置操作
    public function set()
    {
        //获取参数数量
        if(func_num_args()>0)
        {
            if((func_num_args() ==1) && is_array(func_get_args())){
                //数组
                $value =func_get_arg(0);
                $this->setting=array_merge($this->setting=$value);
            }elseif(func_num_args() ==2){
                $name = func_get_arg(0);
                $value = func_get_arg(1);
                $this->setting[$name] = $value;
            }else{
                echo '非法参数';
            }
        }else{
            echo '没有参数传入';
        }
    }

    //获取参数:当无参数时,默认获取全部
    public function get($name='')
    {
        if(empty($name)){
            return $this->setting;
        }
        return $this->setting[$name];
    }
}

$obj = config::getInstance();
//var_dump($obj);
$obj->set('host','127.0.0.1');
echo $obj->get('host'),"<hr>";
$obj->set(['host'=>'127.0.0.1','user'=>'root','password'=>'root']);
print_r($obj->get());

运行实例 »

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

2.MVC的实现原理

实例

<?php
/**
 * 模型层
 */

namespace mvc\model;


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

    //查询
    public function select($table,$num){

        //创建预处理对象
        $stmt = $this->pdo->prepare("SELECT * FROM {$table} LIMIT :num");
        //查询
        $stmt->bindValue(":num",$num,\PDO::PARAM_INT);
        $stmt->execute();

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

运行实例 »

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

实例

<?php
/**
 * 视图类
 */

namespace mvc\view;


class View
{
    public $data = [];

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

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

    //渲染模板
    public function dispaly($data)
    {
        $table = '<!doctype html>
<html lang="zh-Hans">
<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">
    <title>MVC简介</title>
    <style>
        table,th,td{
            border:1px solid black;
        }
        table {
            border-collapse:collapse;
            width:60%;
            margin:30px auto;
            text-align:center;
        }
        table tr:first-child{
            background: lime;
        }
        table caption{
            font-size:1.5em;
            margin-bottom:15px;

        }
    </style>
</head>
<body>
    <table >
        <caption>员工信息表</caption>
        <tr>
            <td>ID</td>
            <td>姓名</td>
            <td>年龄</td>
            <td>工资</td>
        </tr>';
        foreach ($data as $value) {
            $table .= '<tr>';
            $table .= '<td>' . $value['id'] . ' </td>';
            $table .= '<td>' . $value['name'] . ' </td>';
            $table .= '<td>' . $value['age'] . ' </td>';
            $table .= '<td>' . $value['salary'] . ' </td>';
            $table .= '</tr>';
        }
        $table .= '</table></body></html>';
        echo $table;
    }
}

运行实例 »

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

实例

<?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');
        $model->select('staff',12);
        $result = $model->result;
        require './view/View.php';
        $view = new View($result);
        $data = $view->getData();
        $view->dispaly($data);
    }
}

运行实例 »

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

实例

<?php
/**
 * 入口文件
 */


require './controller/Controller.php';

use mvc\controller\Controller;
$controller = new Controller;
$controller->index();

运行实例 »

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


3.MVC的设计思想是什么?

mvc主要应该是把视图,模型分开进行处理,这有助于团队协作,

也为了代码复用.   控制器统一分发请求与动作.交给模型进行逻辑处理,最后传到视图进行显示出来

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