DPT-一种PHP设计模式 .docx
《DPT-一种PHP设计模式 .docx》由会员分享,可在线阅读,更多相关《DPT-一种PHP设计模式 .docx(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品名师归纳总结一、 DPT 介绍PHP 为什么在主流的应用中总是那么不杰出,总是不如.Net/Java,就是由于在 PHP 处理大型应用的时候,那些不完整的面对对象机制、数据库处理的单一,不通用性等等,影响了PHP 做大型应用。那么,如何来转变这个状况了?当然就是需要引进一些新的设计方法,把PHP 中不健全的面对对象机制完整起来, 进行更好的 PHP 大中型应用的开发。从 Java过来的 MVC 模式特殊流行,而且已经有部分已经引伸进了 PHP 领域,设计模式的引进,就是为了更好的把握工程开发。今日我要说一种设计模式,类似于 MVC ,它叫 DPT 模式。其实有时候我也觉得有点象 Java里
2、面的 DAOData Access Object ,不过 DAO 是夹在业务规律层和数据库资源层之间的,而DPT 更多的是把业务规律也封装在类里,和DAO 层在相同的内容中。D Data,数据收集层P Php,PHP 数据调用层T Template,模板层第一,我们要对它进行简洁的明白。Data,就是我们的数据层,它不是数据库抽象类,而是通过数据库接口,执行一些SQL,把数据猎取的过程,一般把这种操作封装在类里面,就形成了我们的数据收集层。可编辑资料 - - - 欢迎下载精品名师归纳总结Template,模板层,就是我们的HTML 页,里面不包含任何 PHP 代码,只有模板标签的内容,通过它来
3、把握数据在页面中有格式的显示。我们这里三层中, 每一层都是鼓励由一个人来开发,然后通过 PHPDoc 之类的工具, 把源代码中的API生成文档,由 P 层的人进行调用。那么,在实际的工程开发中,它是怎么运作的了,我们又如何把这种设计模式引进我们的工程中了?我们下面将运用一个实际的工程来讲解DPT 模式。阅读一下内容必需具备基本的PHP4 的面对对象编程、数据库抽象类、模板等学问。我们目前为了加速 PHP 的开发,都使用PHP 封装了部分功能,比如数据库操作抽象类,模板类等等, 这些都是为了开发复杂应用而应运而生的。目前比较主流的数据库抽象类有phplib db 、PEAR:DB 、ADODB
4、等等,模板处理类有 phplib template 、smartTemplate、Smarty 等等。本文中都是使用PHP Group 举荐的产品,数据口抽象类使用PEAR:DB ,模板处理类使用 Smarty,假如对这两个类库不熟识的读者,请参考文章后面的链接。二、工程体系结构下面我们来构建我们基于DPT 模式的 PHP 应用。(以下部分内容参考MVC 模式、类封装仍是黑客代码)文件目录结构(只涉及到关键的目录) class类库,包含全部的数据收集层template 模板文件存放目录include常用库,包括 PEAR、Smarty 等类库,同时仍有自己定义的基本函数config.inc.p
5、hp基本配置文件,包括数据库配置,其他基本信息配置security.inc.php 安全处理页,主要多传递的变量进行处理init.inc.phperror.php错误处理页可编辑资料 - - - 欢迎下载精品名师归纳总结如 cmsMessage.class.php,那么这个类就是属于功能CMS 里面的,只负责操作Message这个表。全部的数据库交互和操作都是封装在类里的,在P 层不答应显现任何直接操作数据库的语句。template 目录中存放了我们的网页模板,模板中都是使用Smarty 标签进行排列的,同时,在模板中, 都是建议使用 JSCSS 来把握页面,模板中只有DIV 标签来简洁的排版
6、,这样,特殊利于网站改版和更换皮肤。include 目录就是对常用文件的包含,比如PEAR:DB 类、 Smarty 类库文件等。 config.inc.php 就是基本的配置文件,包括数据库、基本常量等等,security.inc.php 是安全处理页,我们这里主要是做一个变量的安全检查,下面内容我们将仔细介绍。init.inc.php 是一个初始化操作的页面,包括初始化数据库链接,实例化模板处理类等等操作, error.php 是错误信息处理页,全部的错误信息通过URL 编码后转到该页。三、工程基本配置代码关键页代码实例:/* config.inc.php* 配置文件*/* 数据库配置*/
7、defineDB_HOST, localhost 。 /数据库主机defineDB_USER, root 。 /数据库链接用户defineDB_PASS, 。 /连接密码defineDB_NAME, cms 。 /默认数据库defineDB_PORT, 3306 。 /数据库端口defineDB_TYPE, mysql 。 / 数据库类型defineDB_OPT, 1 。 /是否长期链接/* 模板信息配置 */defineTPL_TEMPLATE_DIR, ./template/。 / 模板目录defineTPL_COMPILE_DIR, ./template/templates_c/。 /模
8、板编译目录可编辑资料 - - - 欢迎下载精品名师归纳总结defineTPL_CACHE_DIR,./template/cache/。 /模板缓存目录defineTPL_LIFTTIME,1。/ 缓存时间defineTPL_CACHEING,true。 /是否缓存defineTPL_LEFT_DELIMITER, 。/左边界符defineTPL_RIGHT_DELIMITER, 。/右边界符/* 网站路径配置 */defineROOT_PATH, dirnameFILE。 /网站所在根目录defineURL_PATH, dirname$_SERVERPHP_SELF。 /网站 URL 的址路径
9、defineDB_PATH, ROOT_PATH./include/db。 /PEAR:DB 目录defineTPL_PATH, ROOT_PATH./include/smarty。 /Smarty 目录/* security.inc.php* 安全过滤文件*/* 过滤规章*/$arr_filtrate = array, , 。/* 过滤函数*/function var_filtrate$varglobal $arr_filtrate 。foreach $arr_filtrate as $valueif eregi$var, $value return true 。return false。可
10、编辑资料 - - - 欢迎下载精品名师归纳总结if phpversion 4.1.0 $get = &$HTTP_GET_VARS。$post = &$HTTP_POST_VARS 。 else $get = &$_GET 。$post = &$_POST 。/* 检查 GET 变量 */ if count$get foreach $post as $get_var if var_filtrate$get_var exitCommit get parameter falsity 。/* 检查 POST变量 */ if count$post foreach $post as $post_var
11、if var_filtrate$post_var exitCommit post parameter falsity 。其实,以上过滤的方法也不是最好的,建议参考我的另两篇防注入文章猎取更好的方法,链接参考附录。/* error.php可编辑资料 - - - 欢迎下载精品名师归纳总结*/if .isset$getmsg exitNot commit parameter 。echo Error Message: . $getmsg 。echo 返回上一页 。就是一些错误处理的作用,一般出的GET 方式传递过来的消息都是经过urlencode 过的字符。/* init.inc.php* 初始化程序
12、*/require_oncedirnameFILE.config.inc.php 。require_onceROOT_PATH.security.inc.php 。require_onceDB_PATH.DB.php 。require_onceTPL_PATH.Smarty.class.php 。/* 初始化数据库链接*/$db = DB:connectDB_TYPE:/DB_USERDB_PASS:DB_HOST/DB_NAME, DB_OPT。if DB:isErro$db return $dg-getMessage 。$tpl = &new Smarty 。/* 初始化模板 */$tpl
13、-templates_dir = TPL_TEMPLATE_DIR。$tpl-compile_dir = TPL_COMPILE_DIR。$tpl-cache_dir= TPL_CACHE_DIR 。$tpl-configs= TPL_CONFIGS_DIR 。$tpl-lifetime= TPL_LIFTTIME。可编辑资料 - - - 欢迎下载精品名师归纳总结$tpl-left_delimiter = TPL_LEFT_DELIMITER。$tpl-right_delimiter = TPL_RIGHT_DELIMITER。基本文件描述完毕。代码写了不少,只是为了更好的懂得这个模式。四、框
14、架实际开发说明: 我们以下工程代码都是以 cms 数据库中 topic 表做例子, 代码只是为了演示框架结构, 没有对代码进行测试,不保证能够正常运行。topic 的表结构:CREATE TABLE topic id int11 NOT NULL auto_increment,title varchar255 NOT NULL default ,addtime int11 default NULL,author varchar50 default NULL,type int11 default NULL,option int11 default NULL, PRIMARY KEYid,KEY
15、id id。(一) Data 层:数据采集层Data 层主要就是针对数据库的全部操作都封装起来,然后通过接口的形式供应应 Php 层进行调用,同时在 Data 层里也封装了一些原始的数据库操作(类似于 Java中的 DAO )。一般 Data 层都是类的形式,储存在我们上面的 /class 目录下,一般的准就是一个类文件操作一个数据表,就是说不管详细的业务规律如何,全部的数据表操作都是封装在一个类文件里的。比如说我们有一个数据表叫做topic,那么我们对应操作的类文件就是: topic.class.php。其实这里是可以做扩展的,比如说,我们的工程特殊庞大,有很多内容, 比如包括有 CMS 、
16、Blog 、BBS 等等,那么我们就必需给每一个栏目支配一个数据库,那么针对当前操作数可编辑资料 - - - 欢迎下载精品名师归纳总结作在类里面进行的链接。假设我们目前操作的栏目是CMS 系统,数据库名叫做 cms,那么我们下面构造一个操作cms 数据库里面的 topic 表的类来。/* cms_topic.class.php* 文章处理类*/class cmsTopicvar cmsDBName。 / 数据库名var cTableName。 /当前操作的表名var cDsn。 /数据链接源var cDebug。 /是否打开调试 ,1 为是, 0 为否var cDbPointer/链接资源va
17、r cfetchMode/猎取数据库资料的方式var cEncode /数据库中数据储存的编码格式,默认是UTF-8/* 构造函数 */ function cmsTopic/配置信息从 config.inc.php 中设置$this-cfetchMode = DB_FETCHMODE_DEFAULT。$this-cTableName = topic 。$this-cDsn = mysql:/. DB_USER.:.DB_PASS.DB_HOST./.DB_NAME 。可编辑资料 - - - 欢迎下载精品名师归纳总结/* 链接数据库*/function connectDatabaseif .is
18、_object$cDbPointer$this-cDbPointer = DB:connect$this-cDsn 。if $this-cEncode=utf8 $this-cDbPointer-queryset names utf8 。$this-cDbPointer-setFetchMode$this-cfetchMode 。if DB:isError$this-cDbPointer return false。return $this-cDbPointer 。/* 关闭数据库连接 */ function closeDatabaseif is_object$this-cDbPointer $
19、this-cDbPointer-disconnect 。/*-数据库基本操作*/可编辑资料 - - - 欢迎下载精品名师归纳总结function insert$arrif.is_array$arr | count$arr = 0 return false。if = $this-cTableName return false 。$db = $this-connectDatabase 。$res = $db-autoExecute$this-cTableName,$arr,DB_AUTOQUERY_INSERT。ifDB:isError$res return $res。else$insertId
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DPT-一种PHP设计模式 DPT 一种 PHP 设计 模式
限制150内