博主信息
博文 34
粉丝 0
评论 0
访问量 33215
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
MVC设计模式+数据库连接单例类
罗盼的博客
原创
1025人浏览过

1.入口文件.index.php

实例

<?php
/*单例类:允许且仅被实例化一次的类,该类多次应用但是是同一个对象,
且该对象不允许被克隆,自身实例化,自身返回该类对象
注:因为php中的单例和java asp.net ios等不一样,php中所有的全局变量和
静态成员在被解释执行后都会被收回,不像java asp.net ios的单例会存在整个
应用程序的生命周期内,所以php单例类适用于单个页面多次调用同一个对象
*/
/*
MVC设计模式是v是视图层展示用户界面,m是模型层处理数据,c是控制层,
控制m和v同步,取出m模型层传送数据对v进行渲染
*/
require './control/control.php';
$control = new control;
$control->index();
?>

运行实例 »

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


2.控制器文件control.php

实例

<?php
require './Model/model.php';//加载模型
require '/View/view.php';//加载视图
class control
{
    
    public function index()
    {
      //获取模型数据
     $model =model::getInstace();
     $result = $model->select(' userinfo ',' id,account,head ',' id>0 ',' ',' ');
     //渲染视图
     $view = new view();
     print $view->display($result);
    }

}

?>

运行实例 »

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


3.视图文件view.php

实例

<?php
class view
{
  public  $html;
  private $data;

  public function display($data=array()){     
   $this->html ='<!DOCTYPE HTML>
            <html>
            <head>
            	<meta http-equiv="content-type" content="text/html" />   
            	<title>用户信息表</title>
            </head>        
            <body> ';
    
      
    $this->html.='<table width=30%  align="center" cellpadding="5px" border="1px soilds" cellspacing="0" >';
    $this->html.='<caption style="margin-left:20px;margin-bottom:20px;font-size:1.5em;">用户信息</caption>';
    $this->html.='<tr style="text-align:center;background-color: lightblue"> <td>用户ID</td> <td>用户名</td> <td>用户级别</td>';
    foreach($data as $v){
      $this->html.='<tr style="text-align:center"> <td>'.$v['id'].'</td> <td>'.$v['account'].'</td> <td>'.$v['head'].'</td>';          
    }  
    $this->html.='</table>';   
    $this->html.= '</body></html>';
    
    return $this->html; 
  }

}

?>

运行实例 »

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


4.模型文件model.php

实例

<?php
//数据库单例模型
class model
{
    private $type = 'mysql';//数据库类型
    private $host = '127.0.0.1';//数据库主机
    private $user = 'root';//数据库用户名
    private $pass = 'root';//数据库密码
    private $name = 'test';//数据库名
    private $char= 'utf8';//数据库字符集
    private static $instace;//实例对象
    private $pdo= null;//PDO对象
    private $result= null;//执行结果
    
    
    //构造方法私有,禁止外部改变
    private function __construct()
    {       
             /*PDO连接数据库*/
        $dsn = $this->type.':host='.$this->host.';dbname='.$this->name;
        try{
            //设置数据库字符集
            $set_char = array(PDO::ATTR_PERSISTENT=>true,PDO::ATTR_ERRMODE=>2,PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES utf8');
            //连接数据库
            $this->pdo = new PDO($dsn,$this->user,$this->pass,$set_char);                    
        }catch(PDOException $e){
            //捕捉错误信息
            die('连接失败:'.$e->getMessage());
            
        }

    }
          
   //防止克隆
   private function __clone() {}
   //实例化
   public static function  getInstace(){
        
        if((self::$instace instanceof self) == false){//检测当前对象是否已经创建且属于当前实例
           self::$instace =new self();
        }
    return self::$instace;
   }
    
    //查询语句
    public function select($table,$filed = '*',$where=' ',$orderBy = ' ',$limit = ' '){
        $sql  = " SELECT $filed FROM $table WHERE $where  $orderBy  $limit";
        $stmt=$this->pdo->prepare($sql);
        if($stmt->execute()){
          $this->result = $stmt->fetchAll();
          
          return $this->result;
        }else{
           echo '查询出错'; 
        }

    }
    
    
}

?>

运行实例 »

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



批改状态:合格

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

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

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