PHP实现MVC开发得最简单的方法——模型

昨天群里有人说使用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来说明如何使用模型的其他方法,比如说查询、更新、增加、分页列表、多表连查等等。

(0)

相关推荐

  • PHP的Laravel框架结合MySQL与Redis数据库的使用部署

    相对于熟读官方文档,更重要的是要把框架环境搭起来. 零.环境介绍 操作系统:centOS 数据库: mysql 5.6 (阿里云RDS) PHP 5.4.4 (>=5.4即可) Laravel 5.0 一.安装LNMP 在安装Laravel之前,需要把Linux + Nginx + Mysql + Php的环境搭建好.具体的搭建步骤这里就不再详述了. P.S. Linux阿里云已经自带了,本文使用的是centOS 6.5 64位的ECS 关于Nginx和Apache的选择看自己喜好,本文使用的是

  • ThinkPHP实例化模型的四种方法概述

    本文讲述了ThinkPHP实例化模型的四种方法,对于ThinkPHP程序设计来说有非常重要的应用.具体如下: 1.创建一个基础模型:实例化一个系统自带的数据库操作类 Test.Model.class.php页面代码如下: class TestModel extends Model{ } UserAction.class.php页面代码如下: function test(){ $test=M('test');//表示实例化的是自带的Model类,并且传入test值表示操作的是test表 //等同于

  • PHP开发框架Laravel数据库操作方法总结

    一.读/写连接 有时您可能希望使用一个SELECT语句的数据库连接,,另一个用于插入.更新和删除语句.Laravel使这微风,将始终使用正确的连接是否使用原始查询,查询生成器或雄辩的ORM. 如何读/写连接应该配置,让我们看看这个例子: 复制代码 代码如下: 'mysql' => array('read' => array('host' => '192.168.1.1'),'write' => array('host' => '196.168.1.2'),'driver' =

  • PHP的Yii框架中使用数据库的配置和SQL操作实例教程

    数据库访问 (DAO) Yii 包含了一个建立在 PHP PDO 之上的数据访问层 (DAO). DAO为不同的数据库提供了一套统一的API. 其中ActiveRecord 提供了数据库与模型(MVC 中的 M,Model) 的交互,QueryBuilder 用于创建动态的查询语句. DAO提供了简单高效的SQL查询,可以用在与数据库交互的各个地方. Yii 默认支持以下数据库 (DBMS): MySQL MariaDB SQLite PostgreSQL CUBRID: 版本 >= 9.3 .

  • 最新的php 文件上传模型,支持多文件上传

    复制代码 代码如下: <?php class UploadModel { protected $keys; protected $err = array(); protected $target; protected $exts; protected $maxSize; protected $randName; protected $files = array(); /** * 初始化变量 */ public function __construct() { $this->exts = arr

  • thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法

    本文实例讲述了thinkphp视图模型查询失败提示:ERR: 1146:Table 'db.pr_order_view' doesn't exist解决办法.分享给大家供大家参考.具体方法如下: 一.问题描述: 想用thinkphp的视图模型进行关联查询,结果出现了这样的问题(log日志记录):ERR: 1146:Table 'db.pr_order_view' doesn't exist,我就纳闷,视图模型怎么出来的sql是这样的呢,视图模型如下: 复制代码 代码如下: class Order

  • 实现PHP框架系列文章(6)mysql数据库方法

    实现一个mysql数据库封装需要考虑的问题 1.使用方便性 采用直接sql语句操作方式.只要会写sql语句,那么将没有其他学习成本. uctphp框架提供的dba辅助封装类,用会之后将爱不释手. 使用前需要显示初始化并连接到数据库吗,当然不需要. 直到执行第一条sql语句之前,都不会去连接数据库,甚至不会new一个db对象. dba将会在合适的时机去连接数据库并执行初始化字符编码操作. 查询语句.不需要new一个查询构造器也不提供链式操作方式,那样复杂且低效. dba提供了以下的查询辅助函数.

  • ThinkPHP框架分布式数据库连接方法详解

    本文实例分析了ThinkPHP框架分布式数据库连接方法.分享给大家供大家参考,具体如下: Thinkphp作为国内的一款流行框架,相信使用的人一定不在少数.本篇我们来分析一下Thinkphp中比较重要的一部分--分布式数据库的连接. 当然了,我们在这里不是去将如何使用模型去对数据库进行增删改查.我们是对其底层的连接代码做一个分析,可以帮助大家更好的理解thinkphp对数据库的操作.方便我们以后的使用. 一.单一数据库的连接 在使用的时候,单一数据库的连接配置非常简单.我们只需要在配置文件中配置

  • ThinkPHP关联模型操作实例分析

    通常我们所说的关联关系包括下面三种: ◇ 一对一关联 : ONE_TO_ONE , 包括 HAS_ONE 和 BELONGS_TO ◇ 一对多关联 : ONE_TO_MANY , 包括 HAS_MANY 和 BELONGS_TO ◇ 多对多关联 : MANY_TO_MANY 关联定义 数据表的关联 CURD 操作,目前支持的关联关系包括下面四种:HAS_ONE . BELONGS_TO . HAS_MANY . MANY_TO_MANY . 一个模型根据业务模型的复杂程度可以同时定义多个关联,不

  • 自制PHP框架之模型与数据库

    什么是模型? 我们的WEB系统一定会和各种数据打交道,实际开发过程中,往往一个类对应了关系数据库的一张或多张数据表,这里就会出现两个问题. 1.类和数据表,一方修改会导致另一方的修改,只要数据表结构不定下来,业务逻辑的开发几乎没法开工 2.获取数据时会牵涉很多SQL语句的拼接,如果数据结构变动,这些SQL需要改写 假如要开发一个博客系统,我们先设计两个Model和两张数据表 第一张数据表,表名是post,存储了博客文章,数据如下: 第二章数据表,表名是comment,存储了博客文章的评论,数据如

随机推荐