博客列表 >单例模式和MVC模式作业

单例模式和MVC模式作业

YHF的博客
YHF的博客原创
2018年09月19日 12:03:241246浏览

一.单例模式:

实例

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


class Config1{}
//实例化
    $obj1=new Config1();
    $obj2=new Config1();

var_dump($obj1,$obj2);
var_dump($obj1 === $obj2);
echo 'hr';
//创建一个使用的配置类:单例模式
class Config{
    /**
     * 用静态是因为静态属性属于类的,被所有实例所共享;
     * 实例初始化为null是因为便于检测
     */
    private static $instance=null;//默认值就是null,可以省略;
    //配置参数容器
    private $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 '未知参数';
            }
        }else{
            echo '没有参数';
        }
    }
    public function get($name=''){
        if(empty($name)){
            //获取所有参数
            return $this->setting;
        }
        //获取某个参数
        return $this->setting[$name];
    }
}

$obj3=Config::getInstance();
$obj4=Config::getInstance();
var_dump($obj3,$obj4);
var_dump($obj3===$obj4);


$obj3->set('商品类型','手机');
echo $obj3->get('商品类型');
$obj3->set(['商品类型'=>'电脑','商品价格'=>8000,'商品***'=>'戴尔','售后评价'=>'优']);
echo '<hr>';
echo '<pre>',print_r($obj3->get(),true);

运行实例 »

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

1.jpg

二.MVC模式:

controller.php

实例

<?php
/**
 * Created by PhpStorm.
 * User: 714326675
 * Date: 2018/9/12
 * Time: 18:12
 */

namespace mvc\controller;
use mvc\model\Model;
use mvc\view\View;
class Controller
{
   public function index(){
       //测试模型
       require './model/Model.php';
       $model=new Model('test','root','');
       $model->select('user',5);
       $result=$model->result;
//print_r($result);

//引用view.php
       require './view/view.php';
//导入model.php查询出来的数据
       $view=new View($result);
//把$this->data的内容赋值给$data
       $data=$view->getData();
//显示内容
       $view->display($data);
   }
}

运行实例 »

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

model.php

实例

<?php
/**
 * Created by PhpStorm.
 * User: 714326675
 * Date: 2018/9/12
 * Time: 17:51
 */

namespace mvc\model;


class Model
{
    public $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 `id`,`name`,`salary`,`email` FROM {$table} LIMIT :num;");
        $stmt->bindValue(':num',$num,\PDO::PARAM_INT);
        $stmt->execute();
        $this->result=$stmt->fetchAll(\PDO::FETCH_ASSOC);
    }
}

运行实例 »

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

view.php

实例

<?php
/**
 * Created by PhpStorm.
 * User: 714326675
 * Date: 2018/9/12
 * Time: 17:39
 */

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">
    <title>用户表</title>
    <style>
        table{
            width: 60%;
            text-align:center;
            border-collapse: collapse;
            margin:30px auto;


        }
        table,th,td{
            border:1px solid black;
        }
        table tr:first-child{
            background-color:#22c9f1;
        }
        table caption{
            font-size:1.5em;
            margin-bottom:15px;
        }
        td{
            padding:8px;
        }
    </style>
</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['id'].'</td>';
            $table.='<td>'.$staff['name'].'</td>';
            $table.='<td>'.$staff['salary'].'</td>';
            $table.='<td>'.$staff['email'].'</td>';
            $table.='</tr>';
        }
        $table.='</table></body></html>';
        echo $table;
    }
}

运行实例 »

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

index.php

实例

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

运行实例 »

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

2.jpg


三.MVC设计思想:

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:

Model(模型)表示应用程序核心(比如数据库记录列表)。

View(视图)显示数据(数据库记录)。

Controller(控制器)处理输入(写入数据库记录)。

MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。

Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。

通常模型对象负责在数据库中存取数据。

View(视图)是应用程序中处理数据显示的部分。

通常视图是依据模型数据创建的。

Controller(控制器)是应用程序中处理用户交互的部分。

通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。



作者:NickName_Lower
链接:https://www.jianshu.com/p/642830030437
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


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