PHP实现MVC开发得最简单的方法――模型


Posted in PHP onApril 10, 2007

昨天群里有人说使用MVC让程序多了很多数据库操作,使得性能下降,这着实让我吃了一惊。MVC只是一种框架,与数据库操作没有任何关系。MVC只是提供一种清晰的编程开发模式,只要你处理的好,是不可能多处很多无谓的数据库操作的。如果一个MVC让一个程序员在不知情的情况下多出了很多数据库操作就绝对不是一个很好的MVC架构。我觉得MVC只要提供一个简单的开发框架就行了,没有必要集成很多库类,库类最好能让程序员自己选择去使用。 
    我自己这个MVC框架的目的就只是实现一个简单的MVC流程,其他的大家具体情况具体添加。做到真正的小巧、灵活、高效! 
    前几周我写了两篇文章,《PHP实现MVC开发得最简单的方法——视图及模版技术》、《PHP实现MVC开发得最简单的方法——单点入口》。今天具体说说如何实现MVC的模型。 
    我没有深入研究过MVC的理论,对我个人来说,模型就是一个数据库的封装,调用模型的方法,你可以得到相应的数据,但实现的细节程序员不需要关心。在实际开发中,很可能一个数据库的表就对应一个模型。比如说一个用户信息表userinfo,对应就有一个模型user,通过调用模型user的add()方法你就可以向数据库添加一条数据,通过select()你就可以实现查询,通过update就能实现更新。同时模型应该是和具体的数据库类型无关的,无论你使用的mysql,oracle还是sql server。同时我不推荐在WEB开发中使用ROR,复杂的多表查询使用SQL语言是多么方便和快捷的事情,而且性能更好。如果一个程序员连SQL的知识都没有,我不认为他是一个合格的程序员。所以,我在我的模型里面,提供了一个query的方法来实现直接的SQL查询。 
     下面是模型的一个大概结果。不是完整代码,完整代码请见demo包。 

<?    
class module{       var $mysql;//数据库操作类,可以是mysql,oracle,sql等等    
   var $tbname;//模型对应的表名称    
   var $debug=false;//是否是调试模式    
   function module($tbname,$db=''){}//构造函数    
   function _setDebug($debug=true){}//开启或者关闭调试模式    
   function add($row,$tbname=''){}//新增加一条记录    
   function query($strsql){}//直接查询sql语句    
   function count($where='',$tbname=''){ }//计数统计    
   function select($where='',$tbname=''){}//查询    
   function delete($where='',$tbname=''){}//删除满足条件的一个记录    
   function update($set,$where,$tbname=''){}//更新指定记录    
   function detail($where,$tbname=''){}//详细显示一条记录    
}    
?>  

    在这个模型里面,我是使用数组和数据库的字段来对应的。早期的PHPBEAN里面使用了对象来对应。但后来感觉这种方法在PHP中不好,而且增加了很多无谓的类。使用数组更加方便,效果更好(PHP中的数组的确是个好东西,相对JAVA来说好太多了)。 

    在下面的demo中,我使用了mysql数据库来演示,其中数据库操作类改自我原来的一个库类,详细请看《修改下以前的库类,php5->php4》。 

    下面,详细讲解使用demo。^_^ 
     在原来的的包的index.php里面增加 

<?  
require_once(SITE_PATH.'/libs/phpbean.class.php');  
require_once(SITE_PATH.'/libs/mysql.class.php');  
$phpbean=new phpbean();  
global $phpbean;  

$mysql=new mysql("localhost","****","****","52site");   
$phpbean->register('db',$mysql);  
unset($mysql);  
?>  

   这段代码主要是把MYSQL注册到注册器里面,关于注册器的使用的原理,可以看我翻译的两篇文章。 
 然后新建一个mysqlController.class.php文件,代码如下: 

<?  
/**  
  * MVC演示demo  
  * 仅仅实现最基本的MVC功能,不包含安全处理,数据过滤,及其他优化措施。  
  * @author:feifengxlq  
  * @since:2007-1-24  
  * @copyright http://www.phpobject.net/blog/  
*/  
class mysqlController  
{  
    var $module;  

    function mysqlController(){  
        require_once(SITE_PATH.'/libs/module.class.php');  
        $this->module=new module('52site_siteinfo');//52site_siteinfo为表名称  
        $this->module->query("set names 'gb2312'");//如果是MYSQL5请加上这句  
    }  

    function indexAction(){  
        print_r($this->module->select());//这样实现了读取数据  
    }  
}  
?>  

     上面首先是控制器的构造函数里面,加入一个模型。然后在indexAction里面调用模型的方法来显示数据。这样就实现了最简单的查询列表。你可以通过这个地址来查看你的结果http://path/to/yoursite/mv... 
     以后我会写一个具体的demo来说明如何使用模型的其他方法,比如说查询、更新、增加、分页列表、多表连查等等。

PHP 相关文章推荐
一棵php的类树(支持无限分类)
Oct 09 PHP
phpexcel导入excel数据使用方法实例
Dec 24 PHP
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
Mar 13 PHP
thinkPHP实现瀑布流的方法
Nov 29 PHP
自己写的php中文截取函数mb_strlen和mb_substr
Feb 09 PHP
php实现通过cookie换肤的方法
Jul 13 PHP
Yii框架组件和事件行为管理详解
May 20 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
Oct 08 PHP
php表单习惯用的正则表达式
Oct 11 PHP
PHP的mysqli_thread_id()函数讲解
Jan 24 PHP
PHP微信网页授权的配置文件操作分析
May 29 PHP
PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能
Sep 23 PHP
PHP+Tidy-完美的XHTML纠错+过滤
Apr 10 #PHP
ASP和PHP都是可以删除自身的
Apr 09 #PHP
收藏的一个php小偷的核心程序
Apr 09 #PHP
PHP中文汉字验证码
Apr 08 #PHP
动易数据转成dedecms的php程序
Apr 07 #PHP
一篇入门的php Class 文章
Apr 04 #PHP
手把手教你使用DedeCms V3的在线采集图文教程
Apr 03 #PHP
You might like
thinkphp获取栏目和文章当前位置的方法
2014/10/29 PHP
PHP中的自动加载操作实现方法详解
2019/08/06 PHP
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
使用jquery prev()方法找到同级的前一个元素
2014/07/11 Javascript
javascript 动态创建表格的2种方法总结
2015/03/04 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
关于JS中二维数组的声明方法
2016/09/24 Javascript
JavaScript仿聊天室聊天记录
2016/12/27 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
2016/12/29 Javascript
canvas 绘制圆形时钟
2017/02/22 Javascript
Javascript中的作用域及块级作用域
2017/12/08 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
vue.js提交按钮时进行简单的if判断表达式详解
2018/08/08 Javascript
Javascript执行流程细节原理解析
2020/05/14 Javascript
[13:18]《一刀刀一天》之DOTA全时刻21:详解TI新赛制 A队再露獠牙
2014/06/24 DOTA
跟老齐学Python之玩转字符串(2)
2014/09/14 Python
python实现稀疏矩阵示例代码
2017/06/09 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
详解python tkinter模块安装过程
2020/01/06 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
快速查找Python安装路径方法
2020/02/06 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
CSS3为背景图设置遮罩并解决遮罩样式继承问题
2020/06/22 HTML / CSS
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
自动化专业个人求职信范文
2013/11/29 职场文书
餐饮投资计划书
2014/04/25 职场文书
户外活动总结范文
2014/04/30 职场文书
建筑工地大门标语
2014/06/18 职场文书
2015年后备干部工作总结
2015/05/15 职场文书
阿甘正传观后感
2015/06/01 职场文书
背起爸爸上学观后感
2015/06/08 职场文书
市直属机关2016年主题党日活动总结
2016/04/05 职场文书
闭幕词的写作格式与范文!
2019/06/24 职场文书
医生行业员工的辞职信
2019/06/24 职场文书
SQL实现LeetCode(177.第N高薪水)
2021/08/04 MySQL
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android