博客列表 >第十四课—MVC 2018年9月7日 20时00分

第十四课—MVC 2018年9月7日 20时00分

空白
空白原创
2018年09月10日 15:21:59829浏览

单例模式

实例

<?php
/**
 * 单例模式:一个类只允许实例化一次
 */
class Demo
{
    // 保存当前类的实例
    private static $instance;

    // 配置参数容器
    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=Demo::getInstance();
$obj->set('host','127.0.0.1');
echo $obj->get('host'),'<br>';
$config = ['host'=>'127.0.0.1','user'=>'root','pwd'=>'root'];
$obj->set($config);
print_r($obj->get());

运行实例 »

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

1.png

mvc

实例

<?php
/**
 * 入口文件
 */
require './controller/controller.php';
use mvc\controller\Controller;
$controller = new Controller;
$controller->index();

运行实例 »

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

实例

<?php
/**
 * 控制器
 */

namespace mvc\Controller;
use mvc\model\Model;
use mvc\view\View;
require './model/model.php';
require './view/view.php';

class Controller
{
    public function index()
    {
        //    获取数据库数据
        $model=new Model('test','root','');
        $model->select('user',15);
        $result=$model->result;

//        模板赋值
        $view = new View($result);
        $data = $view->getData();
        $view->display($data);
    }
}

运行实例 »

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

实例

<?php
/**
 * 模型:负责操作数据库
 */

namespace mvc\Model;


class Model
{
    private $pdo;
    public $result;

//    连接数据库
    public function __construct($dbname,$user,$pwd)
    {
        $this->pdo=new \PDO('mysql:host=127.0.0.1;dbname='.$dbname,$user,$pwd);
    }

//    查询
    public function select($table,$num)
    {
//        创建预处理对象
        $stmt=$this->pdo->prepare("SELECT `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: lightgreen;
        }
        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 $test) {
            $table .= '<tr>';
            $table .= '<td>'.$test['id'].'</td>';
            $table .= '<td>'.$test['name'].'</td>';
            $table .= '<td>'.$test['age'].'</td>';
            $table .= '<td>'.$test['salary'].'</td>';
            $table .= '</tr>';
        }

        $table .= '</table></body></html>';
        echo $table;
    }

}

运行实例 »

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

2.png

mvc的设计思想:将项目分成Model 模型、View 视图、Controller 控制器三个模块,模型层负责数据的操作,视图层负责将数据显示到界面上,控制器负责交互

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