正确理解PHP开发MVC模型

PHP开发MVC模型对于初学者来说还是不太了解其中的含义。我们在文章中详细讲述了PHP开发MVC模型的具体方法,希望对大家有所帮助。#t#

使用MVC让程序多了很多数据库操作,使得性能下降,这着实让我吃了一惊。MVC只是一种框架,与数据库操作没有任何关系。MVC只是提供一种清晰的编程开发模式,只要你处理的好,是不可能多处很多无谓的数据库操作的。如果一个MVC让一个程序员在不知情的情况下多出了很多数据库操作就绝对不是一个很好的MVC架构。我觉得MVC只要提供一个简单的开发框架就行了,没有必要集成很多库类,库类***能让程序员自己选择去使用。

我没有深入研究过MVC的理论,对我个人来说,模型就是一个数据库的封装,调用模型的方法,你可以得到相应的数据,但实现的细节程序员不需要关心。在实际开发中,很可能一个数据库的表就对应一个模型。

比如说一个用户信息表userinfo,对应就有一个模型user,通过调用模型user的add()方法你就可以向数据库添加一条数据,通过select()你就可以实现查询,通过update就能实现更新。同时模型应该是和具体的数据库类型无关的,无论你使用的mysql,oracle还是sql server。

同时我不推荐在WEB开发中使用ROR,复杂的多表查询使用SQL语言是多么方便和快捷的事情,而且性能更好。如果一个程序员连SQL的知识都没有,我不认为他是一个合格的程序员。所以,我在我的模型里面,提供了一个query的方法来实现直接的SQL查询。

下面是PHP开发MVC模型的一个大概结果。不是完整代码,完整代码请见demo包。

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

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

在下面的demo中,我使用了mysql数据库来演示,其中数据库操作类改自我原来的一个库类。

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

 

 
 
 
  1. < ?   
  2. require_once(SITE_PATH.'/
    libs/phpbean.class.php');   
  3. require_once(SITE_PATH.'/
    libs/mysql.class.php');   
  4. $phpbean=new phpbean();   
  5. global $phpbean;   
  6. $mysql=new mysql("localhost"
    ,"****","****","52site");   
  7. $phpbean->register('db',$mysql);   
  8. unset($mysql);   
  9. ?>  

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

 

 
 
 
  1. < ?   
  2. /**   
  3. * MVC演示demo   
  4. * 仅仅实现最基本的MVC功能,不包含安全处理
    ,数据过滤,及其他优化措施。   
  5. * @author:feifengxlq   
  6. * @since:2007-1-24   
  7. * @copyright http://www.phpobject.net/blog/   
  8. */   
  9. class mysqlController   
  10. {   
  11. var $module;   
  12. function mysqlController(){   
  13. require_once(SITE_PATH.'/libs/module.class.php');   
  14. $this->module=new module('52site_siteinfo');
    //52site_siteinfo为表名称   
  15. $this->module->query("set names 'gb2312'");
    //如果是MYSQL5请加上这句   
  16. }   
  17. function indexAction(){   
  18. print_r($this->module->select());//这样实现了读取数据   
  19. }   
  20. }   
  21. ?>  

上面首先是控制器的构造函数里面,加入一个模型。然后在indexAction里面调用模型的方法来显示数据。这样就实现了最简单的查询列表。

以后我会写一个具体的demo来说明如何使用PHP开发MVC模型的其他方法,比如说查询、更新、增加、分页列表、多表连查等等。

免责声明:文章内容不代表本站立场,仅供读者参考。产品相关技术问题请发送工单。 本文链接:https://www.idc.net/help/399474/

为您推荐

开源数据收集引擎 Logstash 讲解和示例讲解

一、概述 Logstash 是一个开源的数据收集和日志处理工具,它是 Elastic Stack(ELK Stack)的一部分,用于从各种数据源中采集、转换和传输数据,以帮助分析和可视化大规模数据。Logstash 通常与 Elasticsearch 和 Ki...

八个开源免费单点登录(SSO)系统

单点登录(SSO)是一个登录服务层,通过一次登录访问多个应用。使用SSO服务可以提高多系统使用的用户体验和安全性,用户不必记忆多个密码、不必多次登录浪费时间。 下面推荐一些市场上最好的开源SSO系统,可作为商业SSO替代。 1.Authelia https://github.com/authelia/authelia ...

浅谈HBase数据结构和系统架构

Part 01 LSM树模型 常见的的关系型数据库,如MySQL、SQL Server、Oracle等,使用B+ Tree作为数据存储与索引的基本结构,非叶子节点只存放索引数据,叶子节点存放所有数据和指向相邻节点的指针,具有高效的范围查询和稳定的查找效率,以及具有较小的读放大和空间放大。采用磁盘随机读写方式,且以磁盘数...

微软Radius平台重构现代应用程序部署

微软的 Azure 孵化团队日前推出一个叫 Radius 的新应用平台。Radius 平台可用于在 Kubernetes、公共云和边缘环境中运行各种现代应用程序。 Radius 是一个开源项目,最初支持的应用程序运行时包括Kubernetes、Azure和AWS,以后还会支持诸如谷歌云平台等云环境。 Mark Russ...

Ext JS3.0正式版发布

Ext JS3.0在经历数次RC版之后,extjs.com终于发布3.0的正式版。总体而言,较2.0改进不大,依然还是原理的组件模型,具体更新及改进如下: ◆提供了参照DWR后与后台的通讯包Direct,支持具有明显的REST风格的CRUD服务 ◆一系列的新的组件和例子,包括有图表(Charting, By YUI F...
返回顶部