登录  /  注册
博主信息
博文 33
粉丝 0
评论 2
访问量 36284
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
单例模式,工厂模式,以及注册树和mvc的学习2018/09/07
cxw的博客
原创
689人浏览过

通过今天的学习,我懂得了单例模式只能实例化一次,工厂模式是在函数中实例化类,以及上树模式就是创建一个对象集合,对象池,对象容器,mvc的核心思想,以下是我的编程代码

1,单例模式

实例

<?php
/**
 * 单例模式,一个类仅仅允许实例一次
 */

class   Congig
{

    //创建一个数组容器,
    private $setting=[];
    private  static $instance;
    //创建一个私有的构造方法,作用是不让再外部实例化对象
    private  function  __construct()
    {
    }
    //外部允许通过一个公共静态方法创建实例
    public static  function  getInstance()
    {
        if (self::$instance==null)
        {
            self::$instance=new self();
        }
        return self::$instance;
    }
    //将克隆类进行私有化,防止对象被复制
    private  function __clone()
    {
        // TODO: Implement __clone() method.
    }

    public  function  set()
    {
        //获取参数的数量
       $paramCount= func_num_args();

       if ($paramCount>0)
       {
           switch ($paramCount)
           {
               case 1:
           $value=func_get_arg(0);
           if (is_array($value))
           {
             $this->setting= array_merge($this->setting,$value);
           }else
           {
               echo '数组不能为空';
           }
           break;
               case 2:
                   $name = func_get_arg(0); // 配置项的名称
                   $value = func_get_arg(1); // 配置项的值
                   $this->setting[$name] = $value;
                   break;
               default:
                   echo '非法参数!';
                   break;
           }
       }else
       {
           echo '没有参数';
       }
    }
public  function  get($name='')
{
    if (empty($name))
    {
        return $this->setting;
    }
    return $this->setting[$name];
}
}
$obj=Congig::getInstance();
  $obj->set('host',"127.0.0.1");
  echo  $obj->get('host');
  echo  '<hr>';
  $config=['host'=>'127.0.0.1','root'=>'root'];
  $obj->set($config);
$result=$obj->get();
运行实例 »

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

2,工厂模式

实例

<meta charset="UTF-8">
<?php
/**
 * 工厂函数 不用new 而用函数创建对象
 */
class Factory
{

    public  static function factory12($type,array $size=[])
    {
        switch ($type)
        {
            //加法
            case 'Plus':
                return new calculate($size[0],$size[1]);
                break;

           //减法
            case 'Subtract':
                return  new  Calculate($size[0],$size[1]);
                break;
        //乘法
            case 'Multiply':
                return new Calculate($size[0],$size[1]);
                break;
            //除法
            case 'Divide':
                return new Calculate($size[0],$size[1]);
                break;
        }
    }
}


class  Calculate
{
    private  $param1;
    private  $param2;

    public  function  __construct($param1,$param2)
    {
        $this->param1=$param1;
        $this->param2=$param2;
    }

    //计算加
    public function  plus()
    {
       return ($this->param1+$this->param2);

    }

    //计算减
    public function  subtract()
    {
        return ($this->param1-$this->param2);
    }
    //计算乘
    public function  multiply()
    {
        return ($this->param1*$this->param2);
    }
    //计算乘
    public function  divide()
    {
        if ($this->param2==0)
        {
            return '分母不能为零';
        }
        return ($this->param1/$this->param2);
    }
}
$result=Factory::factory12('Plus',[5,3]);
echo $result->divide();
运行实例 »

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

3,注册树模式

实例

<?php
/**
 * 注册树,就是创建一个对象集合/对象池,对象容器来处理存贮对象
 */

class Demo1{}
class Demo2{}
class Demo3{}
class  Register{
  //创建存储对象的容器
    public static  $objs=[];
    //将对象挂到树上
    public  static  function  set($index,$boj)
    {
        self::$objs[$index]=$boj;
    }
    public  static  function  get($index)
    {
        return self::$objs[$index];
    }
    //销毁对象

    public  static  function  del($index)
    {
        unset(self::$objs[$index]);
    }
}
Register::set('demo1',[1,2]);
Register::set('demo2',[1,2]);
Register::set('demo3',[1,2]);
var_dump(Register::$objs['demo1']);
echo '<hr>';
Register::del('demo2');
var_dump(Register::$objs['demo1']);
var_dump(Register::$objs['demo2']);
运行实例 »

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

4,MVC的实现原理

a,视图层

实例

<?php
/**
 * Created by PhpStorm.
 * User: admin
 * Date: 2018/9/9
 * Time: 20:05
 */
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>
</head>
<body>
<table border="1" cellpadding="5" cellspacing="0" width="60%" style="text-align: center" align="center">
    <caption>信息显示表</caption>
   <tr><th>姓名</th><th>年龄</th><th>邮箱</th></tr>
        ';
        for($i=0;$i<count($data);$i++)
        {
            $table .='<tr>';
            $table .= '<td>'.$data[$i]['name'].'</td>';
            $table .= '<td>'.$data[$i]['age'].'</td>';
            $table .= '<td>'.$data[$i]['email'].'</td>';
            $table .='</tr>';
        }
        $table .='</table>';
        $table .='<div style="text-align: center"><a href="">上一页[</a>1 /<span>'.count($this->data).']</span> <a href="">下一页</a></div>';
        $table .='</body></html>';
        echo  $table;
    }
}
运行实例 »

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

b,model层

实例

<?php
/**
 * Created by PhpStorm.
 * User: admin
 * Date: 2018/9/9
 * Time: 19:56
 */
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)
    {
        $sql="SELECT *from `{$table}` LIMIT :num";
        //创建预处理对象
        $stmt = $this->pdo->prepare($sql);
        //执行查询
        $stmt->bindValue(':num', $num, \PDO::PARAM_INT);
        $stmt->execute();

        $this->result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
    }
}
运行实例 »

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

c,控制器层

实例

<?php
/**
 * Created by PhpStorm.
 * User: admin
 * Date: 2018/9/9
 * Time: 21:00
 */
namespace mvc\controller;
use mvc\view\View;
use mvc\model\Model as m;
class Controller
{
    public  function  index()
    {
        require './model/Model.php';
        $model=new m('test','root','root');
        $model->select('show',2);

        //对视图进行渲染
        $result=$model->result;
        require './view/View.php';
        $view =new View($result);
        $data=$view->getData();
        $view->display($data);
    }
}
运行实例 »

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

以下是我的手抄代码

mvc.jpg



批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学