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;
}
}
?>
控制器代码实现
<?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.控制器调用视图显示这些数据
分工独立,互不影响,显示与逻辑代码相分离
原文:http://blog.csdn.net/gentlemanstyle/article/details/51203191