Blogger Information
Blog 36
fans 0
comment 0
visits 28497
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
单例模式与mvc的简单应用于总结——2018年9月7日
Jackson
Original
751 people have browsed it

单例模式

单例模式就是指一个类只能创建一个对象,这个主要应用在数据库连接和配置参数上。

将构造方法和克隆方法私有化,并通过一个方法来创建对象,在创建的时候先进行判断是否存在该对象了,不存在则创建,存在则返回该对象。案例如下:


实例

<?php
/**
 * 单例模式:一个类只允许实例化一次  私有化构造函数,用其他方法创建对象
 * 1.一个站点只需创建一个数据库连接
 * 2.一个站点通常只需一个配置类
 */

class Config
{
    //静态属性被所有对象共享
    private static $instance = null;

    public $setting = [];//配置参数容器

    //私有化构造器、克隆方法
    private function __construct()
    {

    }
    private function __clone()
    {

    }

    //创建对象

    public static function getInstance()
    {
        if (empty(self::$instance)){
            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:
                    $value = func_get_arg(1);
                    $name = func_get_arg(0);
                    $this->setting[$name] = $value;
                    break;
                default:
                    echo '非法参数';
            }
            return $this->setting;
        }
    }

    //获取参数

    public function getSetting($name='')
    {
        if (empty($name)){
            return $this->setting; //默认返回全部参数
        }
        return $this->setting[$name];
    }
}

$config = Config::getInstance();
$config2 =Config::getInstance();
var_dump($config,$config2);
echo '<hr>';

//设置参数
$config->set('host','127.0.0.1');
echo $config->getSetting('host');
$data = ['host'=>'localhost','user'=>'root','pass'=>'root'];
$config->set($data);
echo '<br>';
print_r($config->getSetting());

运行实例 »

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

2.mvc设计数据库查询

mvc分工明确,model块是负责从数据库拿取数据并进行相应的处理,view块则是接受数据并渲染视图,而controller则是负责控制整合model和view这两块。

首先是model

实例

<?php
/**
 * 模型类  获取数据
 */

namespace mvc\model;


class Model
{
    public $pdo = null;
    public $result = [];//保存查询到的数据
    //连接数据库
    public function __construct($dbname,$user,$pass)
    {
        try{
            $this->pdo = new \PDO('mysql:host=localhost;dbname='.$dbname,$user,$pass);
        }catch (\PDOException $e){
            echo '连接错误:',$e->getMessage();
        }
    }
    //查询数据
    public function select($table, $num)
    {
        //创建预处理对象
        $this->pdo->query('set names utf8');//设置编码
        $stmt = $this->pdo->prepare("SELECT `staff_id`,`name`,`age`,`salary` FROM {$table} LIMIT :num;");
        $stmt->bindValue(':num',$num,\PDO::PARAM_INT);//绑定参数
        $stmt->execute();//执行语句
        return $this->result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
    }
}

运行实例 »

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


然后是view

实例

<?php
/**
 * Created by PhpStorm.
 * User: Jackson
 * Date: 2018/9/16
 * Time: 21:13
 */

namespace mvc\view;


use mvc\model\Model;

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"/>        
            <style type="text/css">
            table{
                text-align: center;
                margin: 50px auto;
                border-collapse: collapse;
                padding: 5px;
                width: 40%;
                }
            table,tr,td,th{
                border: 1px solid black;
            }
            table tr:first-child{background: skyblue;}
            table caption{font-size: 1.5em;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 $row){
            $table.= '<tr><td>'.$row['staff_id'].'</td>';
            $table.= '<td>'.$row['name'].'</td>';
            $table.= '<td>'.$row['age'].'</td>';
            $table.= '<td>'.$row['salary'].'</td></tr>';
        }
        $table .= '</table></body></html>';
        echo $table;//打印视图数据
    }
}

运行实例 »

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

3.controller 部分

实例

<?php
/**
 * Created by PhpStorm.
 * User: Jackson
 * Date: 2018/9/16
 * Time: 21:13
 */

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',5);//调用查询方法
        $result = $model->result;//已获得数据

        require './view/View.php';
        $view = new View($result); //传入数据
        $data = $view->getData();

        $view->display($data);//显示视图
    }
}

运行实例 »

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

4.首页部分

实例

<?php
/**mvc首页
 */

require './controller/controller.php';//引入控制类
use mvc\controller\Controller;

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

运行实例 »

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


3.mvc的设计思想

mvc其实是框架的设计模式,把前端代码和后端代码分开,使得代码的可读性和维护性更高,代码也更简洁,有效地解决代码复用,同时mvc更加方便分组开发,有利于提高工作效率。

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