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详细彻底学习Smarty
Mar 27 PHP
创建数据库php代码 用PHP写出自己的BLOG系统
Apr 12 PHP
PHP中防止SQL注入实现代码
Feb 19 PHP
PHP大转盘中奖概率算法实例
Oct 21 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
Nov 18 PHP
php从csv文件读取数据并输出到网页的方法
Mar 14 PHP
PHP+Javascript实现在线拍照功能实例
Jul 18 PHP
thinkphp微信开发(消息加密解密)
Dec 02 PHP
PHP预定义变量9大超全局数组用法详解
Apr 23 PHP
laravel学习教程之存取器
Jul 30 PHP
PHP 网站修改默认访问文件的nginx配置
May 27 PHP
Laravel框架中Blade模板的用法示例
Aug 30 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 执行系统外部命令 system() exec() passthru()
2009/08/11 PHP
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
laravel 实现设置时区的简单方法
2019/10/10 PHP
javascript写的异步加载js文件函数(支持数组传参)
2014/06/07 Javascript
使用jQuery实现返回顶部
2015/01/26 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
jquery简单插件制作(fn.extend)完整实例
2016/05/24 Javascript
js学习阶段总结(必看篇)
2016/06/16 Javascript
关于数据与后端进行交流匹配(点亮星星)
2016/08/03 Javascript
Node.js Sequelize如何实现数据库的读写分离
2016/10/23 Javascript
基于JavaScript实现拖动滑块效果
2017/02/16 Javascript
Angular自定义组件实现数据双向数据绑定的实例
2017/12/11 Javascript
vue微信分享到朋友圈 vue微信发送给好友
2018/11/28 Javascript
对vue中的事件穿透与禁止穿透实例详解
2019/10/28 Javascript
jquery实现简单自动轮播图效果
2020/07/29 jQuery
vue监听dom大小改变案例
2020/07/29 Javascript
jenkins自动构建发布vue项目的方法步骤
2021/01/04 Vue.js
Python实现螺旋矩阵的填充算法示例
2017/12/28 Python
Python实现处理逆波兰表达式示例
2018/07/30 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
Django模板Templates使用方法详解
2019/07/19 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
django实现日志按日期分割
2020/05/21 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
2020/11/30 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
2020/12/31 Python
丝芙兰巴西官方商城:SEPHORA巴西
2016/10/31 全球购物
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
介绍一下EJB的分类及其各自的功能及应用
2016/08/23 面试题
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
房务中心文员岗位职责
2014/04/16 职场文书
新教师岗前培训方案
2014/06/05 职场文书
幼儿园八一建军节活动方案
2014/08/27 职场文书
2014年工作总结及2015工作计划
2014/12/12 职场文书
师德师风主题教育活动总结
2015/05/07 职场文书