博客列表 >单例模式和MVC的实现原理+2018年9月8日

单例模式和MVC的实现原理+2018年9月8日

Lee的博客
Lee的博客原创
2018年09月10日 00:34:42685浏览

单例模式

实例

<?php

//单例模式

class config
{
    private static $instance = null;
    // 配置参数容器
    public $setting = [];
    // 禁止从类的外部实例化对象
    private function __construct()
    {

    }
    //克隆方法也私有化
    private function __clone()
    {
        // TODO: Implement __clone() method.
    }
    //外部仅允许通过一个公共静态方法来创建实例
    public static function getInstance()
    {
        //检测当前的类属性$instance是否已经保存了当前类的实例
        if (self::$instance == null){
            self::$instance = new self();
        }
        // 如果已经存在当前类的实例,返回当前类的实例
        return self::$instance;
    }
    // 配置项的设置操作
    public function set()
    {
        //获取参数的数量
        $num = func_num_args();
        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 '<span style="color:red">非法参数</span>';
            }
        }else{
            echo '<span style="color:red">没有参数</span>';
        }
    }
    // 获取参数: 当无参数的时候,默认获取全部参数
    public function get($name=''){
        if (empty($name)){
            //获取所有参数
            return $this->setting;
        }
        // 获取某一个参数
        return $this->setting[$name];
    }
}

$obj = config::getInstance();
$obj1 = config::getInstance();
var_dump($obj1 === $obj);
echo '<hr>';
$config = ['host'=>'localhost','user'=>'root','pass'=>'root'];
$obj->set($config);
print_r($obj->get());

运行实例 »

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


QQ截图20180910003127.png

MVC的实现原理

实例
<?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);
    }

}

<?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;
        }
        table{
            border-collapse: collapse;
            width: 600px;
            margin: 30px auto;
            text-align: center;
            padding: 5px;
        }    
        table tr:first-child{
            background-color: dodgerblue;
        }
        table caption{
            font-size: 1.4rem;
            margin-bottom: 15px;
        }
    </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;
    }
}

<?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',8);
        $result = $model->result;

        require './view/View.php';

        $view = new View($result);

        $data = $view->getData();

        $view->display($data);
    }
}

<?php
//入口文件

require 'controller/Controller.php';

use mvc\controller\Controller;

$controller = new Controller();
$controller->index();

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


QQ截图20180910003339.png

 MVC的设计思想是什么?

MVC是一种软件架构的思想,将一个软件按照模型、视图、控制器进行划分。其中,模型用来封装业务逻辑,视图用来实现表示逻辑,控制器用来协调模型与视图(视图要通过控制器来调用模型,模型返回的处理结果也要先交给控制器,由控制器来选择合适的视图来显示 处理结果)。
        1)模型: 业务逻辑包含了业务数据的加工与处理以及相应的基础服务(为了保证业务逻辑能够正常进行的事务、安全、权限、日志等等的功能模块)
        2)视图:展现模型处理的结果;另外,还要提供相应的操作界面,方便用户使用。

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


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