MVC框架初步

MVC初步
Model View Cotroller(框架原理图)
MVC框架原理图
执行的基本步骤:
1.浏览器发出请求给控制器,
2.控制器先调用模型,模型返回给控制器
3.控制器再调用视图文件,显示数据
模型细分
这里写图片描述

具体流程
这里写图片描述
典型实例
显示数据库图表,并可以删除
这里写图片描述
用MVC思想完成需求分析
这里写图片描述
实现过程
这里写图片描述
数据库操作类代码的实现

<?php
/*数据库操作类
1.实例化连接数据库
2.构造方法单例化
3.可以设置字符集编码,可以选择数据库
4.可以执行增删改语句
5.可以执行查询语句,返回一行数据
6.可以执行查询语句,返回多行数据
7.可以执行查询语句,返回一个数字*/
class MysqlDB{
    private $host;              //服务器
    private $prot;              //端口
    private $user_name;         //用户名
    private $user_password;     //密码
    private $charset;           //字符编码
    private $mysql_name;        //数据库名
    private $link=null;
    static private $instance=null;  //2.创建保存对象的静态属性
    /*一、单例模式构造方法*/
    static function getClass($config){  //3.创建获取对象的方法
        if(!(static::$instance instanceof static)){
         static::$instance=new static($config);
        }
        return static::$instance;
    }
    // 4.禁止克隆
    private function __clone()
    {

    }
    //1.私有构造方法
    private function __construct($config){
        $this->host=!empty($config['host'])?$config['host']:"localhost";
        $this->prot=!empty($config['prot'])?$config['prot']:"root";
        $this->user_name=!empty($config['user_name'])?$config['user_name']:"3306";
        $this->user_password=!empty($config['user_password'])?$config['user_password']:"";
        $this->charset=!empty($config['charset'])?$config['charset']:"utf8";
        $this->mysql_name=!empty($config['mysql_name'])?$config['mysql_name']:"mysql39";
        $this->link=mysql_connect("{$this->host}:{$this->prot}","{$this->user_name}","{$this->user_password}") or die('连接失败');
        $this->setCharset($this->charset);
        $this->useDBname($this->mysql_name);
    }

/*二、设计字符编码方法*/
        function setCharSet($charset){
            mysql_query("set names $charset");
        }
/*二、选择要使用的数据库的方法*/
        function useDbName($mysql_name){
            mysql_query("use $mysql_name");
        }
/*三、可以手动关闭数据库*/
        function closeDb(){
            mysql_close($this->link);
            echo"关闭成功";
        }
/*可以执行任意sql语句的发方法
return 执行成功的结果或者提示执行失败*/
        function query($sql){
            $result=mysql_query($sql,$this->link);
            if($result==false){
                echo"<br/><font color='red' face='微软雅黑'>执行失败,请参考如下信息:";
                echo"<br/><font color='red' face='微软雅黑'>错误代号:".mysql_errno();
                echo"<br/><font color='red' face='微软雅黑'>错误信息:".mysql_error();
                echo"<br/><font color='red' face='微软雅黑'>错误语句:".$sql;
            }
            return $result;
        }
/*四、可以执行增删改语句*/
        function exec($sql){
            $result=$this->query($sql); //这里如果执行成功就继续往下执行,不成功下面的代码也不会执行
            return true;
        }
/*五、执行查询语句,返回一行数据*/
        function getRow($sql){
            $result=$this->query($sql);
            $arrayOnceRow=mysql_fetch_array($result);       //得到一行数据保存在数组中
            mysql_free_result($result);     //提前释放资源
            return $arrayOnceRow;           //返回一行数据
        }
/*六、执行查询语句,返回多行数据*/
            function getRows($sql){
                $result=$this->query($sql);
                $arrays=array();               //创建一个空数组
                while($array=mysql_fetch_array($result)){      //得到一个数组保存到$array并循环保存
                    $arrays[]=$array;                           //没得到一个就保存到$arrays这个空数组中
                }
                mysql_free_result($result);     //提前释放资源
                return $arrays;                 //返回多行数据
            }
/*七、返回一个数字*/
            function getData($sql){
                $result=$this->query($sql);
                $arrayData=mysql_fetch_array($result);
                $data=$arrayData[0];
                return $data;
            }
}
?>

控制器代码实现

<?php
require './UserModel.php';                              //1.载入模型(获取数据)
require './FactroyModel.php';                           //载入单例工厂模型(用于载入模型的实例化)
if(!empty($_GET['act']) && $_GET['act'] == 'del'){  //删除功能代码的实现
    $id = $_GET['id'];
    $obj = FactroyModel::Model('UserModel');
    $result = $obj->delUserByID($id);
    echo "<font color=red>删除成功!</font>";
}

$obj=FactroyModel::Model('UserModel');     //2.调用单例工厂模型类实例化UserModel模型类
$data1=$obj->getUserAll();                    //调用UserModel模型类的getUserAll()方法获得所有数据
$data2=$obj->getUserData();               //调用UserModel模型类的getUserData()方法获得一个数字
include './ShowAllUser.html';               //3.载入视图文件html(用户显示数据)
?>

基础模型类的代码实现

<?php
require './MysqlDB.class.php';      //载入数据库操作类
class BaseModel{        
    protected $db=null;                //定义$db变量用于保存实例后的对象
    function __construct(){
        $config=array(
            'host'=>"localhost",
            'port'=>3306,
            'user_name'=>"root",
            'user_password'=>"chang123",
            'charset'=>"utf8",
            'mysql_name'=>"mysql39",
        );
        $this->db=MysqlDB::getClass($config);                //实例化的对象保存在$db中
    }
}
?>

用户模型类

<?php
require './BaseModel.php';          //载入基础模型类
class UserModel extends BaseModel{      //继承基础模型类
    function getUserAll(){                      //获得所有数据的方法
        $sql="select * from user_list";
        $data=$this->db->getRows($sql);        //通过$this->db对象调用数据库操作类的getRows()方法
        return $data;
    }
    function getUserData(){                   //获得一个数字的方法
$sql="select count(*) as c from user_list";
$data=$this->db->getData($sql);
return $data;
}
function delUserByID($id){                   //删除功能的方法
$sql="delete from user_list where user_id = $id";
$data=$this->db->exec($sql);
return $data;
}
}
?>

工厂模型类

<?php
class FactroyModel{
    static $allModel=array();               //创建一个数组用于保存对象模型
    static function Model($modelName){
        if(!isset(static::$allModel[$modelName])||                 
            !(static::$allModel[$modelName] instanceof $modelName)){      //如果不存在或者不是其实例
            static::$allModel[$modelName]=new $modelName;
        }
        return static::$allModel[$modelName];
    }
}
?>

视图显示代码实现

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>Title</title>
    <meta charset="utf-8">
</head>
<body>
    <table bgcolor="#faebd7" border="1" cellpadding="0" cellspacing="0">
    <?php
      foreach($data1 as $key=>$value){
    ?>
        <tr>
             <td><?php echo $value['user_name']?></td>
            <td><?php echo $value['user_pass']?></td>
            <td><?php echo $value['age']?></td>
            <td><?php echo $value['edu']?></td>
            <td><?php echo $value['xingqu']?></td>
            <td><?php echo $value['from']?></td>
            <td>
                <a href='?act=del&id=<?php echo $rec['user_id']; ?>' onclick='return queren()'>删除</a>

        <tr>

        <?php 
        }
        ?>
        </table>
当前人数为:<?php echo $data2;?>
</body>
<script>
    function queren(){
        return window.confirm("你真的要删除吗?");
    }
</script>
</html>

总结:具体实现的步骤
1.FactroyModel类用于实例用户模型(UserModel)
2.BaseModel基础模型(BaseModel)类用于实例数据库操作模型( MysqlDB)类
3.用户模型(UserModel)类继承基础模型类通过调用基础模型(BaseModel)类对象调用数据库操作( MysqlDB)类的方法来获取数据
4.UserModel用户模型类获取的数据返回给控制器
5.控制器调用视图显示这些数据
分工独立,互不影响,显示与逻辑代码相分离

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值