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 相关文章推荐
php5.3 废弃函数小结
May 16 PHP
在VS2008中编译MYSQL5.1.48的方法
Jul 03 PHP
php fsockopen中多线程问题的解决办法[翻译]
Nov 09 PHP
PHP 设计模式之观察者模式介绍
Feb 22 PHP
PHP中对缓冲区的控制实现代码
Sep 29 PHP
Zend studio文件注释模板设置方法
Sep 29 PHP
PHP register_shutdown_function()函数的使用示例
Jun 23 PHP
php实现的数字验证码及数字运算验证码
Jul 30 PHP
php获取当前页面完整URL地址
Dec 30 PHP
PHP实现文件上传下载实例
Oct 18 PHP
PHP单态模式简单用法示例
Nov 16 PHP
详解php与ethereum客户端交互
Apr 28 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
PHP入门
2006/10/09 PHP
php 操作符与控制结构
2012/03/07 PHP
THINKPHP内容分页代码分享
2015/01/14 PHP
PHP开发注意事项总结
2015/02/04 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
2016/04/02 PHP
php禁用函数设置及查看方法详解
2016/07/25 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
2019/09/16 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
2019/10/30 PHP
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
JavaScript 反科里化 this [译]
2012/09/20 Javascript
使用jQuery简单实现模拟浏览器搜索功能
2014/12/21 Javascript
了不起的node.js读书笔记之例程分析
2014/12/22 Javascript
javascript实现鼠标移到Image上方时显示文字效果的方法
2015/08/07 Javascript
微信小程序 less文件编译成wxss文件实现办法
2016/12/05 Javascript
canvas实现弧形可拖动进度条效果
2017/05/11 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
解决vue 中 echart 在子组件中只显示一次的问题
2018/08/07 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
微信小程序picker组件两列关联使用方式
2020/10/27 Javascript
python中日期和时间格式化输出的方法小结
2015/03/19 Python
python Django框架实现自定义表单提交
2016/03/25 Python
python使用pycharm环境调用opencv库
2018/02/11 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
CentOS 7下安装Python3.6 及遇到的问题小结
2018/11/08 Python
django admin组件使用方法详解
2019/07/19 Python
在linux系统下安装python librtmp包的实现方法
2019/07/22 Python
python标记语句块使用方法总结
2019/08/05 Python
python 判断一组数据是否符合正态分布
2020/09/23 Python
python自动化测试三部曲之unittest框架的实现
2020/10/07 Python
python利用proxybroker构建爬虫免费IP代理池的实现
2021/02/21 Python
美国韩国化妆品和护肤品购物网站:Beautytap
2018/07/29 全球购物
网上蛋糕店创业计划书
2014/01/24 职场文书
《哪吒闹海》教学反思
2014/02/28 职场文书
学子宴致辞大全
2015/07/27 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
Java中Quartz高可用定时任务快速入门
2022/04/03 Java/Android