Blogger Information
Blog 38
fans 0
comment 0
visits 25284
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
第十四课—MVC 2018年9月7日 20时00分
空白
Original
830 people have browsed it

单例模式

实例

<?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 控制器三个模块,模型层负责数据的操作,视图层负责将数据显示到界面上,控制器负责交互

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