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实现MVC开发得最简单的方法――模型
Apr 10 PHP
php adodb连接带密码access数据库实例,测试成功
May 14 PHP
php session 检测和注销
Mar 16 PHP
PHP管理内存函数 memory_get_usage()使用介绍
Sep 23 PHP
PHP设计模式之结构模式的深入解析
Jun 13 PHP
PHP面向对象教程之自定义类
Jun 10 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
Dec 18 PHP
一个简单的php MVC留言本实例代码(必看篇)
Sep 22 PHP
PHP中散列密码的安全性分析
Jul 26 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
Aug 03 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
Oct 03 PHP
数据结构之利用PHP实现二分搜索树
Oct 25 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快速url重写 更新版[需php 5.30以上]
2010/04/20 PHP
CI框架源码阅读,系统常量文件constants.php的配置
2013/02/28 PHP
作为PHP程序员应该了解MongoDB的五件事
2013/06/03 PHP
php实现读取和写入tab分割的文件
2015/06/01 PHP
thinkPHP中配置的读取与C方法详解
2016/12/05 PHP
javascript 可以拖动的DIV(二)
2009/06/26 Javascript
jquery的选择器的使用技巧之如何选择input框
2013/09/22 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
2013/10/17 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
2013/12/29 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
基于jQuery插件实现环形图标菜单旋转切换特效
2015/05/15 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
ionic环境配置及问题详解
2017/06/27 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
总结JavaScript在IE9之前版本中内存泄露问题
2018/04/28 Javascript
angular2路由之routerLinkActive指令【推荐】
2018/05/30 Javascript
vue使用自定义指令实现拖拽
2021/01/29 Javascript
解决vue打包后刷新页面报错:Unexpected token
2019/08/27 Javascript
[02:53]DOTA2英雄昆卡基础教程
2013/11/25 DOTA
[00:50]深扒TI7聊天轮盘语音出处6
2017/05/11 DOTA
Django进阶之CSRF的解决
2018/08/01 Python
浅谈Pycharm调用同级目录下的py脚本bug
2018/12/03 Python
Pandas之groupby( )用法笔记小结
2019/07/23 Python
python实现身份证实名认证的方法实例
2019/11/08 Python
Python笔记之工厂模式
2019/11/20 Python
python爬虫模拟浏览器访问-User-Agent过程解析
2019/12/28 Python
python和php学习哪个更有发展
2020/06/17 Python
HTML5+WebSocket实现多文件同时上传的实例
2016/12/29 HTML / CSS
施华洛世奇日本官网:SWAROVSKI日本
2018/05/04 全球购物
应用电子专业学生的自我评价
2013/10/16 职场文书
管理岗位竞聘演讲稿
2014/08/18 职场文书
基层党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
2016年3月份红领巾广播稿
2015/12/21 职场文书
解决numpy数组互换两行及赋值的问题
2021/04/17 Python