PHP之简单MVC
2016-03-18 16:16
776 查看
MVC思想是现在大多数语言都流行的项目架构思想,其中
m代表model(模型,项目中数据处理|业务逻辑处理单元),一张表一个模型
v代表view(视图,项目中结果展示的单元|模板文件),
c代表controller(控制器,项目中负责某个功能整体流程调度单元)。
MVC项目架构思想(项目中代码间的组织关系),不决定语法形式(OOP,面向过程),仅仅决定代码分工方式。
在网站请求服务中先访问controller,如需数据库数据就调用model进行数据请求和处理,model将数据返回给controller后再调用view生成完整html页面返回给浏览器。现流行的模板引擎是smarty,不过本文只是介绍mvc思想,不使用smarty。
特点如下:
浏览器仅仅与控制器C交互
模型M与视图V都被控制器C调用
模型M与视图V之间,不存在任何交互
模型类:
controller
模型的单例,如果在一个功能(控制器)中,如果使用某个表的多次操作,应该使用该表的一个模型即可。可以通过一个单例工厂实现,不使用三私一公,不方便多个模型类使用。
model
基础模型类,对同一个功能模块进行封装继承,提高复用
view
注意:
PHP逻辑最好与HTML展示分离出来
在HTML中嵌套PHP代码时候,仅仅将需要PHP处理的内容,在PHP便签中输出,其它的都在PHP便签外输出。便于后期更新
模板中使用流程控制结构,建议使用模板语法代替大括号语法,包括代码段
资源(源代码+mysql)
m代表model(模型,项目中数据处理|业务逻辑处理单元),一张表一个模型
v代表view(视图,项目中结果展示的单元|模板文件),
c代表controller(控制器,项目中负责某个功能整体流程调度单元)。
MVC项目架构思想(项目中代码间的组织关系),不决定语法形式(OOP,面向过程),仅仅决定代码分工方式。
在网站请求服务中先访问controller,如需数据库数据就调用model进行数据请求和处理,model将数据返回给controller后再调用view生成完整html页面返回给浏览器。现流行的模板引擎是smarty,不过本文只是介绍mvc思想,不使用smarty。
特点如下:
浏览器仅仅与控制器C交互
模型M与视图V都被控制器C调用
模型M与视图V之间,不存在任何交互
模型类:
controller
模型的单例,如果在一个功能(控制器)中,如果使用某个表的多次操作,应该使用该表的一个模型即可。可以通过一个单例工厂实现,不使用三私一公,不方便多个模型类使用。
<?php class Factory{ static protected $arr = array(); static public function newMod($mode_name){ if(!isset(Factory::$arr[$mode_name])){ $file = $mode_name.'.class.php'; require_once M_dir.$file; Factory::$arr[$mode_name] = new $mode_name; } return Factory::$arr[$mode_name]; } } ?>
<?php require_once C_dir.'factory.class.php'; // $match = new match_m(); $match = Factory::newMod('match_m'); $res = $match->match_list(); require_once V_dir.'match.html'; ?>
model
基础模型类,对同一个功能模块进行封装继承,提高复用
<?php require_once DIR.'/mysqldb.class.php'; class model{ protected $db; public function __construct(){ $this->initDb(); } public function initDb(){ $this->db = mysqldb::getInsance(); } } ?>
<?php require_once M_dir.'model.class.php'; class match_m extends model{ public function match_list(){ $sql = 'select m.m_id,t.t_name as t1,m.t1_score,a.t_name as t2,m.t2_score,m.m_time from tch as m left join team as t on m.t1_id=t.t_id left join team as a on m.t2_id=a.t_id'; return $this->db->get_all($sql); } } ?>
view
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>match</title> </head> <body> <table> <tr> <td>场次</td> <td>主队</td> <td>主比分</td> <td>客比分</td> <td>客队</td> <td>时间</td> </tr> <?php foreach ($res as $key => $value):?> <tr> <td> <?php echo $value['m_id'];?> </td> <td> <?php echo $value['t1'];?> </td> <td> <?php echo $value['t1_score'];?> </td> <td> <?php echo $value['t2_score'];?> </td> <td> <?php echo $value['t2'];?> </td> <td> <?php echo date('Y-m-d H:i:s',$value['m_time']);?> </td> </tr> <?php endforeach?> </table> </body> </html>
注意:
PHP逻辑最好与HTML展示分离出来
在HTML中嵌套PHP代码时候,仅仅将需要PHP处理的内容,在PHP便签中输出,其它的都在PHP便签外输出。便于后期更新
模板中使用流程控制结构,建议使用模板语法代替大括号语法,包括代码段
foreach() : endForeach; for() : endFor(); while() : endWhile; if : elseif : else : endIf;
资源(源代码+mysql)
相关文章推荐
- 一个关于if else容易迷惑的问题
- 分享微信开发Html5轻游戏中的几个坑
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得
- apache 环境下 php 的配置注意事项
- ASP.NET、ASP、PHP、JSP之间有什么区别?
- PHP VBS JS 函数 对照表
- C语言实现的统计php代码行数功能源码(支持文件夹、多目录)