MVC框架初步

来源:互联网 发布:金林钣金展开软件下载 编辑:程序博客网 时间:2024/06/06 09:19

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;            }}?>

控制器代码实现

<?phprequire './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(用户显示数据)?>

基础模型类的代码实现

<?phprequire './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中    }}?>

用户模型类

<?phprequire './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;}}?>

工厂模型类

<?phpclass 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.控制器调用视图显示这些数据
分工独立,互不影响,显示与逻辑代码相分离

0 0
原创粉丝点击