Blogger Information
Blog 28
fans 0
comment 0
visits 26823
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
单例模式和MVC模式作业
YHF的博客
Original
1248 people have browsed it

一.单例模式:

实例

<?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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


Correction status:Uncorrected

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