MVC基本架构思想

php编程的几种模式

  混编模式:php和html混合在一起

  逻辑和显示模式:php和html代码分开,先写逻辑php部分,引入html文件

  MVC:就是把逻辑部分 分离成controlor (控制器)和model(模型)  、显示(view);

    M:Model,模型,项目中的数据处理单元,专门负责和数据库进行交互(增删改查)--------相当于饭店中的洗菜或改刀人员

    V:View,视图,项目中应用结果展示的单元,(以前的模板文件  html js css等)----------相当于饭店中的服务员,上菜操作

    C:Controlle,控制器,项目中负责某个功能整体流程的调用单元-----------------相当于饭店中的厨师,负责调动

 

  此时,浏览器只需要和C 控制器进行交互,而模型M和视图V都被控制器所调用,并且模型M和V之间不存在任何的交互

  MVC架构优点:

    代码结构分工明确,谁该干什么就干什么,可读性强

    项目开发效率高,更有利于团队合作

    后期项目的维护和升级变得非常容易

 

  MVC架构的缺点 

    降低了代码运行的效率

    

强调:

  MVC项目中架构思想,指的是项目中代码间的组织关系,不决定语法形式,面向过程和面向对象都可以使用MVC的架构思想

  但是,MVC和面向对象语法才是"黄金搭档",所以,我们项目中的功能基本上都还要封装到类中!

 

 

 

简单的MVC代码展示

Model 模型层

<?php 
class MyPDO
{
    private static $instance;  //保存对象
    private $host;      //主机地址
    private $dbname;    //数据库名字
    private $port;      //端口
    private $user;      //用户名
    private $pwd;       //密码
    private $charset;   //字符集
    private $link;      //连接对象


    private function __construct($data){

        $this->initParam($data);
        $this->getPDO();
        $this->errorMode();
    }

    private function __clone(){

    }

    //获取单例
    public static function getInstance($data=array()){
        if(!self::$instance instanceof self){
            return self::$instance=new self($data);
        }
        return self::$instance;
    }

    //初始化参数
    private function initParam($data){
        $this->host=$data['host'] ?? 'localhost';
        $this->dbname=$data['dbname'] ?? 'my_db';
        $this->port=$data['port'] ?? '3306';
        $this->user=$data['user'] ?? 'root';
        $this->pwd=$data['host'] ?? 'root';
        $this->charset=$data['charset'] ?? 'utf8';
    }

    //显示错误
    private function showError($e,$sql=null){
        echo "错误信息".$e->getMessage()."<br>";
        echo "错误代码".$e->getCode()."<br>";
        echo "错误文件".$e->getFile()."<br>";
        echo "错误行号".$e->getLine().'<br>';
        if($sql!=null){
            echo "错误sql语句".$sql;
        }
    }
    //连接数据库
    private function getPDO(){
        try {
            $this->link= new PDO("mysql:host={$this->host};port={$this->port};dbname={$this->dbname};charset={$this->charset}","{$this->user}","{$this->pwd}");
        } catch (PDOException $e) {
           $this->showError($e);
            exit;
        }
    }

    //设置错误模式
    private function errorMode(){
        $this->link->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    }

    

    /**
     * 增删改功能
     * @param string sql语句
     * @return int 受影响的行数
     */
    public function exec($sql){
        try {
            return $row=$this->link->exec($sql);
        } catch (PDOException $e) {
            $this->showError($e,$sql);
            exit;
        }

    }

    /**
     * 获取二维数组结果集
     * @param string sql
     * @return PDOStatement 结果集
     */

     public function fetchAll($sql){
         try{
            $stmt=$this->link->query($sql);
            return $stmt->fetchAll();

         }catch(PDOException $e){
            $this->showError($e,$sql);
         }

     }

     /**
      * 获取一维数组结果集
      *@param string sql
      *@return PDOStatement 结果集
      */
      public function fetch($sql){
          try {
            $stmt= $this->link->query($sql);
            return $stmt->fetch();
          } catch (PDOException $e) {
              $this->showError($e,$sql);
          }

      }

      /**
       * 获取单行单列
       * @param string sql
       * @return mixed 内容
       */
      public  function fetchColumn($sql){
          try {
            $stmt=$this->link->query($sql);
            return $stmt->fetchColumn();
          } catch (PDOException $e) {
              $this->showError($e,$sql);
          }
      }

      //转账事务操作
      public function beginTransction($sql_out,$sql_in){
         try {
                $this->link->beginTransaction();
                $out=$this->link->exec($sql_out);
                $in=$this->link->exec($sql_in);
                if($out && $in){
                    $this->link->commit();
                    echo "转账成功";
                }else{
                    $this->link->rollBack();
                }
         } catch (PDOException $e) {
             $this->showError($e);
         }
      }

}

View 视图层

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="" method="get">
        转出卡号:<input type="text" name="out" id=""><br>
        转入卡号:<input type="text" name="in" id=""><br>
        金额:<input type="text" name="money" id=""><br>
        <input type="submit" value="转账">
    </form>
</body>
</html>

 

Controller 控制器层

 

<?php 
    //控制器调用视图 view.html
    require 'view.html';

    //调用Model 模型类;
    require 'model.php';
    if(!empty($_GET)){
        $out=$_GET['out'];
        $in=$_GET['in'];
        $money=$_GET['money'];

        $pdo=MyPDO::getInstance();
        $pdo->beginTransction("update my_bank set mony=mony-$money where carNo=$out","update my_bank set mony=mony+$money where carNo=$in");
    }

 

 

 

 

 

  

posted @ 2021-01-22 12:03  WhiteSpace  阅读(453)  评论(0编辑  收藏  举报