MVC框架初步
来源:互联网 发布:金林钣金展开软件下载 编辑:程序博客网 时间:2024/06/06 09:19
MVC初步
Model View Cotroller(框架原理图)
执行的基本步骤:
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
- MVC框架初步
- Spring MVC框架初步搭建
- spring MVC框架的初步搭建
- MVC初步之如何搭建MVC框架(二)
- 【ASP.NET自己写MVC框架】2、初步实现MVC的Controler和View
- MVC初步(一)
- MVC初步认识
- 初步认识MVC
- MVC初步理解
- 初步学习MVC
- MVC初步学习
- mvc初步理解
- 基于Java spring MVC框架 开发初步 ——以做一个留言板为例
- Web开发之PHP框架(二)-Laravel数据库初步及MVC
- JAVA MVC框架之SSH(status2.3.29+hiber4.1.3+Spring4.2.5)初步学习探究
- MVC框架
- MVC框架
- MVC框架
- 用类对象初始化int,double 等类型的变量
- 了解HTML/HTML5中的download属性
- 【学习】关于datatable组件的使用(一)
- eclipse使用教程系列二:从svn上检出项目
- nyoj 722 数独
- MVC框架初步
- iOS项目上传到AppStore步骤流程
- iOS修改系统音量
- eclipse使用教程系列之三:导入maven项目转换web项目并打包编译图文详解
- Code Hunt BOF 2016初体验
- iOS每日一记-----如何写好简历 。。。。
- 怎样让您的系统也有“数据透视表”功能?
- 删除已经配置的类库和移除CocoaPods
- @property atomic与nonatomic readonly