博客列表 >MVC设计模式+数据库连接单例类

MVC设计模式+数据库连接单例类

罗盼的博客
罗盼的博客原创
2018年09月10日 15:41:23834浏览

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 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议