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 管理系统程序中的后门
Aug 05 PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
Jun 01 PHP
php指定函数参数默认值示例代码
Dec 04 PHP
PHP读取大文件的类SplFileObject使用介绍
Apr 09 PHP
解决cPanel无法安装php5.2.17
Jun 22 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
Jun 25 PHP
php函数实现判断是否移动端访问
Mar 03 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
Jul 02 PHP
PHP中的命名空间详细介绍
Jul 02 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
Oct 10 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
Mar 25 PHP
Laravel利用gulp如何构建前端资源详解
Jun 03 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实现建立多层级目录的方法
2014/07/19 PHP
最新优化收藏到网摘代码(digg,diigo)
2007/02/07 Javascript
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
2011/07/04 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
jQuery的缓存机制浅析
2014/06/07 Javascript
javascript trim函数在IE下不能用的解决方法
2014/09/12 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
js运动应用实例解析
2015/12/28 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
2016/06/16 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
2016/10/13 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
JS的函数调用栈stack size的计算方法
2018/06/24 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
javascript实现拼图游戏
2021/01/29 Javascript
python获取豆瓣电影简介代码分享
2014/01/16 Python
Python内建函数之raw_input()与input()代码解析
2017/10/26 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
如何使用Python多线程测试并发漏洞
2019/12/18 Python
python中for in的用法详解
2020/04/17 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
Python 多进程、多线程效率对比
2020/11/19 Python
分享CSS3中必须要知道的10个顶级命令
2012/04/26 HTML / CSS
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
孕妇装中的著名品牌:Isabella Oliver(伊莎贝拉·奥利弗)
2016/10/31 全球购物
Rag & Bone官网:瑞格布恩高级成衣
2018/04/19 全球购物
大学生的网上创业计划书
2013/12/31 职场文书
职称评定自我鉴定
2014/03/18 职场文书
亮剑精神观后感
2015/06/05 职场文书
幽灵公主观后感
2015/06/09 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书
高中班主任寄语
2019/06/21 职场文书
成功的商业计划书这样写才最靠谱
2019/07/12 职场文书
OpenCV实现常见的四种图像几何变换
2022/04/01 Python
Golang数据类型和相互转换
2022/04/12 Golang