电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

用PHP5進行三層開發(fā)

瀏覽:32日期:2024-01-31 17:58:48

原文:http://www.onlamp.com/pub/a/php/2004/12/09/three_tier.htmlThree-Tier Development with PHP 5by Luis Yordano Cruz12/09/2004

此文演示了PHP三層開發(fā)的強大功能,PEAR::DB_DataObject用于業(yè)務邏輯,Smarty用于顯示邏輯,這里假設你熟

悉了HTML,Smarty,PEAR::DB_DataObject,Mysql和PHP5.如果你需要補充知識,下面的文章解釋了一些原理:

用PHP DataObject簡化業(yè)務邏輯Smarty簡介:一個PHP模板引擎PHP可伸縮性:Myth

你應該已安裝和配置好了Apache,MySQL,和PHP5(或者IIS,MySQL5和PHP)

PEAR::DB_DataObjectPEAR::DB_DataObject 是一個用戶數(shù)據(jù)庫訪問的抽象API.它是一個基于PEAR::DB的SQL構建器和數(shù)據(jù)建模層.它

把數(shù)據(jù)庫表映射到PHP類并且提供像SELECT,INSERT,UPDATE,和DELETE這樣的公共SQL函數(shù).這使即使不了

解SQL的開發(fā)者也可以寫出好的數(shù)據(jù)庫訪問代碼,并且鼓勵演示邏輯和業(yè)務邏輯有一個清晰的分離.

(DB_OO已經移動到的PEAR,現(xiàn)在是DB_DataObject,如果你有老的代碼要更新,查看關于從老的db_oo代碼更新到

DB_DataObjects的注釋).

相關閱讀Upgrading to PHP 5By Adam Trachtenberg

Table of ContentsIndexSample Chapter

Read Online--Safari Search this book on Safari: Only This Book All of SafariCode Fragments only; DataObject performs two tasks. First, it builds SQL statements based on the object's variables and the builder

methods. Second, it acts as a datastore for a table row. There's a core class, which you extend for each of

your tables so that you put the data logic inside the data classes. There's also an included Generator to make

your configuration files and your base classes.

DataObject 執(zhí)行兩個任務.第一,它構建基于對象變量的SQL語句和構建器方法.第二,它作為數(shù)據(jù)庫表的數(shù)據(jù)存

儲.這里有個核心類,對于每個表繼承它,以使你把數(shù)據(jù)邏輯放入數(shù)據(jù)類中.這里還包括一個生成器,

DataObject 極大的簡化了數(shù)據(jù)庫訪問代碼,它使開發(fā)大型的,數(shù)據(jù)驅動的站點更加容易.

At present, Alan Knowles, the lead developer of PEAR::DB_DataObject, is working on a new project called DBDO,

a C implementation of the PEAR package DB_DataObjects, based on libgda. His goal is to create the next

generation of PEAR::DB_DataObjects.

SMARTY

Smarty是一個從web頁演示中分離內容的PHP模板引擎.它使用GPL許可.

Large projects commonly separate the role of the graphic designer from that of the programmer. However,

programming in PHP has the tendency to combine those two roles in a person and inside the code. This can bring

difficulties when it comes time to change some part of the page's design. If the page mixes content and

presentation, the developer has to crawl through the program to find the presentation. Smarty helps to solve

this problem.

Combining the TwoThe first thing to do when starting this project is to create a workspace in which to store the project's code.

Then it's time to configure PEAR::DB_DataObject to connect to the MySQL database MySQL (name: example),

map the database tables to PHP classes, and then configure Smarty for the presentation tier for the user. Here

are those steps in more detail:

創(chuàng)建工作環(huán)境

創(chuàng)建一個叫做dataobjects的目錄.

從命令行安裝PEAR::DB_DataObject,鍵入:>pear install Date>pear install DB_DataObject>pear list

INSTALLED PACKAGES:===================PACKAGE VERSION;STATEArchive_Tar;;;;1.2;;;stableConsole_Getopt;1.2;;;stable DB;;;;;1.6.5;stableDB_DataObject;;1.7.1;stable; *(Goal)Date;;;1.4.3;stableMail;;;1.1.3;stableNet_SMTP; 1.2.6;stableNet_Socket;;;;;1.0.2;stablePEAR;;;1.3.1;stablePHPUnit1.0.1;stableXML_Parser;;;;;1.2.0;stableXML_RPC1.1.0;stable

安裝和配置Smarty

從下載開始,(我使用2.6.5版的Smarty)解壓到你自己的目錄.從它的libs目錄中把Smarty.class.php,

Smarty_Compiler.class.php, Config_File.class.php, and debug.tpl文件復制到dataobjects目錄中.

還要復制core和plugins目錄和其中所有的內容.創(chuàng)建幾個新的目錄,命名為templates, templates_c, configs,

和cache.

最后dataobjects目錄包含:

|---- cache|---- configs|---- core|---- plugins|---- templates|---- templates_c

11/10/2004; 11:17 a.m.;<DIR> .11/10/2004; 11:17 a.m.;<DIR> ..11/10/2004; 11:17 a.m.;<DIR> cache11/10/2004; 11:17 a.m.;<DIR> configs11/10/2004; 11:17 a.m.;<DIR> core11/10/2004; 11:17 a.m.;<DIR> plugins11/10/2004; 11:17 a.m.;<DIR> templates11/10/2004; 11:17 a.m.;<DIR> templates_c07/09/2004; 09:48 a.m.; 13,105 Config_File.class.php16/04/2004; 03:03 a.m.; 5,117 debug.tpl10/09/2004; 02:15 p.m.; 65,350 Smarty.class.php10/09/2004; 07:14 p.m.; 90,924 Smarty_Compiler.class.php 4 archivos;;;;;174,496 bytes 8 dirs6,699,454,464 bytes libres

創(chuàng)建數(shù)據(jù)庫創(chuàng)建一個名為example的數(shù)據(jù)庫,它包含一個名為User的表,不必擔心模式,稍后我們會創(chuàng)建.

配置PEAR::DB_DataObject要構建數(shù)據(jù)對象,創(chuàng)建下面的文件

configDB.php<?phprequire_once 'DB/DataObject.php';$config = parse_ini_file('example.ini',TRUE);

foreach($config as $class=>$values) { $options = &PEAR::getStaticProperty($class,'options'); $options = $values;}?>

此腳本基于example配置文件中的值創(chuàng)建一個到數(shù)據(jù)庫的連接,顯示如下.

example.ini[DB_DataObject]database = mysql://root:@localhost/exampleschema_location; = /dataobjects/schema/class_location= /dataobjects/require_prefix= /dataobjects/class_prefix;;= DataObjects_extends_location = DB/DataObject.phpextends; = DB_DataObject

自動構建數(shù)據(jù)庫模式

包含兩個過程,構建數(shù)據(jù)庫的對象-關系映射,和從example數(shù)據(jù)庫user表中自動創(chuàng)建一個類.在表中的所有字段

名將成為類成員變量.

創(chuàng)建適當?shù)哪J?

C:PHPPEARDBDataObject>C:PHPphp.exe createTables.php C:dataobjectsexample.ini

這將生成User.php文件:

<?php/*** Table Definition for user* www.mypchelp.cn*/require_once 'DB/DataObject.php';

class DataObjects_User extends DB_DataObject { ###START_AUTOCODE

/* the code below is auto generated do not remove the above tag */ var $__table = 'user';;;;;// table name var $user_Id // int(11); not_null primary_key auto_increment var $first_Name;;;// string(30); not_null var $last_Name;;;;// string(40); not_null var $email// string(100); not_null

/* Static get */ function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('DataObjects_User',$k,$v);}

/* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE}?>

它還會為user表模式生成example.ini配置文件:

[user]user_Id;= 129first_Name = 130last_Name; = 130email;;;= 130

[user__keys]user_Id = N

Smarty filesIt's time to create several files for Smarty:

Smarty文件現(xiàn)在是創(chuàng)建幾個Smarty文件的時候了:

include.php1 <?2require('Smarty.class.php');3$smarty = new Smarty;4$smarty->template_dir = 'templates/';5$smarty->compile_dir; = 'templates_c/';6$smarty->config_dir= 'configs/';7$smarty->cache_dir;=; 'cache/';?>

此腳本實例化了一個新Smarty對象.設置Smarty屬性.

index.php1 <? 2; require('include.php');3; $smarty->assign('TITLE','ACCESS MySQL DATABASE IN THREE TIERS WITH PHP');4; $smarty->assign('HEADER','WHAT WISH DO ?');5; $smarty->display('index.tpl');?>

給Smarty模板分配變量.

insert.php1; <? 2; require('include.php'); 3; $smarty->assign('TITLE','INSERT DATA'); 4; $smarty->assign('HEADER','Insert Data'); 5; $smarty->assign('data1','First Name');6; $smarty->assign('data2','Last Name');7; $smarty->assign('data3','email');8; $smarty->display('insert.tpl'); ?>

添加將在insert.tpl 使用的變量.調用模板insert.tpl .

save.php1<?2require_once('DB/DataObject.php');3require('configDB.php');4$user = DB_DataObject::factory('user');5$user->first_Name = $x;6$user->last_Name; = $y;7$user->email;;;= $z;8$user_Id = $user->insert();9$user->update();10; echo '<script>location.href='http://www.hdgsjgj.cn/bcjs/index.php'</script>';11 ?>

This script saves data by using a PEAR::DataObject for the user table. Line 2 loads the class DataObject, and

line 3 calls configdb.php to connect to the database. Line 4 creates an instance of a user object (see User.php).

Lines 5 through 7 pass the variables collected from the form in insert.tpl ($x, $y, and $z) in order to save the

data in the database. The primary key of the table is an autoincrement column, so it doesn't need a value there.

Line 8 inserts the object, and line 9 carries out an update.

view.php1; <? 2require_once('DB/DataObject.php');3require('configDB.php');4require('include.php');5$user = DB_DataObject::factory('user');6$user->find();7while ($user->fetch()) {8;;;$smarty->append('users', array( 'ID';;;;;=> $user->user_Id, 'FIRSTNAME' => $user->first_Name,;; 'LASTNAME'; => $user->last_Name,;; 'EMAIL';;=> $user->email,;; )); }9$smarty->assign('TITLE','List Users');10; $smarty->assign('HEADER','List User');11; $smarty->assign('data0','User_Id');12; $smarty->assign('data1','First Name');13; $smarty->assign('data2','Last Name');14; $smarty->assign('data3','email');15; $smarty->display('view.tpl');16; ?>

此腳本顯示所有存儲在user表中的數(shù)據(jù).它加載PEAR::DataObject 和include.php文件(給smarty模板分配變量).第5行創(chuàng)建一個user對象的工廠.第6行執(zhí)行find()方法.SELECT * FROM user從數(shù)據(jù)庫中檢索出了數(shù)據(jù),通

過fetch()方法為模板保存數(shù)據(jù),一次返回一條記錄.

9 到14行是分配其他的變量給Smarty.

這些文件都應當放在dataobjects目錄中.

對于模板,這里有index.tpl,list.tpl,和save.tpl.這里是他們的代碼:

index.tpl1; <html>2<head>3;<title>{$TITLE}</title>4;;<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>5</head>6<table align='center'>;7;<tr> 8;;<td>9;;;;<b>{$HEADER}</b>10;</td>11</tr>12; </table>;13; <table border='1' >14<tr> 16;;<td align='center'>17;;;;<input type='button' name='insert' value='Insert'; onclick='javascript:location.href='http://www.hdgsjgj.cn/bcjs/insert.php';'>18;</td>19</tr>20<tr> 21;;<td align='center'>22;;;<input type='button' name='view' value='View' onclick='javascript:location.href='http://www.hdgsjgj.cn/bcjs/view.php';'>23</td>24</tr>25; </table>26; </body>27 </html>

站點主頁,它在的3行和第9行分別顯示$TITLE 和$HEADER,這些變量值是從index.php傳遞過來的.

這個腳本在web瀏覽器上生成兩個按鈕,Insert和View,他們有相應的行為.如果用戶點擊Insert,系統(tǒng)將調

用Insert.php.如果用戶點擊View,那么view.php將被調用

insert.tpl1 <html>2; <head>3;<title>{$TITLE}</title>4;;<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>5; </head>6; <body>7;;<form name='form1' action='save.php' method='post'>8;;;;<table border='1' >9;;;;;<tr>10; <td align='center'>11;<b>{$HEADER}</b>12 </td>13;;;;</tr>14;;;;<tr>15 <td>16{$data1}17;<input type='text' name='x'>18 </td>19;;;;</tr>20;;;;<tr>21 <td>22{$data2}23;<input type='text' name='y'>24 </td>25;;;;</tr>26;;;;<tr>27 <td>28{$data3}29;<input type='text' name='z'>30 </td>31;;;;</tr>32;;;;<tr>33; <td align='center'>34;<input type='submit' name='Submit' value='Add'>35;<input type='button' name='Reset' value='Return/Cancel' onclick='javascript:location.href='http://www.hdgsjgj.cn/bcjs/index.php';'>36; </td>37;;;;;</tr>38;;;</table>39;</form>40; </body>41 </html>

這個模板有一個表單和兩個按鈕,Add 和Return/Cancel.

用戶輸入數(shù)據(jù),first name,last name 和電子郵件字段.insert.php期望在名為x,y,z的變量中接收這些信息,用戶點

擊Add按鈕將運行save.php.如果用戶點擊Return/Cancel,將會執(zhí)行index.php.

view.tpl1 <html>2; <head>3;<title>{$TITLE}</title>4; </head>5; <body>6<table align='center'>7;;;<tr>8 <td align='center'>9 <b>{$HEADER}</b>10;;;;</td>11;;</tr>12;;</table>13<table border='1' align='center'>14<tr>16;;;;;<td align='center'>17 <b>{$data0}</b>18;;;;</td>19;;;;;<td align='center'>20 <b>{$data1}</b>21;;;;</td>22;;;;;<td align='center'>23 <b>{$data2}</b>24;;;;</td>25;;<td align='center'>26 <b>{$data3}</b>27;;;;</td>28;;</tr>29; {section name=display loop=$users}30;;<tr>31;;;;<td>32 {$users[display].ID}33;;;;</td>34;;;;<td>35 {$users[display].FIRSTNAME}36;;;;</td>37;;;;<td>38 {$users[display].LASTNAME}39;;;;</td>40;;;;<td>41 {$users[display].EMAIL}42;;;;</td>43;;</tr>44;;{/section}45;;<br>46</table>47<br>48;<table align='center'>49;;<tr>50;;;;;<td align='center'>51; <input name='vol' type='button' value='Return'; onclick='javascript:location.href='http://www.hdgsjgj.cn/bcjs/index.php';'>52;;;;</td>53;;</tr>54</table>55; </body>56 </html>

這個模板顯示所有存儲在example數(shù)據(jù)庫中的所有數(shù)據(jù).

最后,Return按鈕把用戶帶回到主頁.

所有的這些(*.tpl)文件必須放在templates目錄下.

標簽: PHP
主站蜘蛛池模板: LOGO设计_品牌设计_VI设计 - 特创易 | 沙盘模型公司_沙盘模型制作公司_建筑模型公司_工业机械模型制作厂家 | 甲级防雷检测仪-乙级防雷检测仪厂家-上海胜绪电气有限公司 | 砂石生产线_石料生产线设备_制砂生产线设备价格_生产厂家-河南中誉鼎力智能装备有限公司 | 金属检测机_金属分离器_检针验针机_食品药品金属检探测仪器-广东善安科技 | 北京晚会活动策划|北京节目录制后期剪辑|北京演播厅出租租赁-北京龙视星光文化传媒有限公司 | 山东钢衬塑罐_管道_反应釜厂家-淄博富邦滚塑防腐设备科技有限公司 | 【中联邦】增稠剂_增稠粉_水性增稠剂_涂料增稠剂_工业增稠剂生产厂家 | 武汉天安盾电子设备有限公司 - 安盾安检,武汉安检门,武汉安检机,武汉金属探测器,武汉测温安检门,武汉X光行李安检机,武汉防爆罐,武汉车底安全检查,武汉液体探测仪,武汉安检防爆设备 | 岩棉板|岩棉复合板|聚氨酯夹芯板|岩棉夹芯板|彩钢夹芯板-江苏恒海钢结构 | MTK核心板|MTK开发板|MTK模块|4G核心板|4G模块|5G核心板|5G模块|安卓核心板|安卓模块|高通核心板-深圳市新移科技有限公司 | 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 | 家德利门业,家居安全门,别墅大门 - 安徽家德利门业有限公司 | 上海办公室装修公司_办公室设计_直营办公装修-羚志悦装 | 焊缝跟踪系统_激光位移传感器_激光焊缝跟踪传感器-创想智控 | 无菌水质袋-NASCO食品无菌袋-Whirl-Pak无菌采样袋-深圳市慧普德贸易有限公司 | 十二星座查询(性格特点分析、星座运势解读) - 玄米星座网 | 青州开防盗门锁-配汽车芯片钥匙-保险箱钥匙-吉祥修锁店 | 医学模型生产厂家-显微手术模拟训练器-仿真手术模拟训练系统-北京医教科技 | 【灵硕展览集团】展台展会设计_展览会展台搭建_展览展示设计一站式服务公司 | 北京网站建设首页,做网站选【优站网】,专注北京网站建设,北京网站推广,天津网站建设,天津网站推广,小程序,手机APP的开发。 | pbt头梳丝_牙刷丝_尼龙毛刷丝_PP塑料纤维合成毛丝定制厂_广州明旺 | 扬尘监测_扬尘监测系统_带证扬尘监测设备 - 郑州港迪科技有限公司 | 电子巡更系统-巡检管理系统-智能巡检【金万码】 | 低浓度恒温恒湿称量系统,强光光照培养箱-上海三腾仪器有限公司 | 江门流水线|江门工作台|江门市伟涛行工业设备有限公司 | 广州展台特装搭建商|特装展位设计搭建|展会特装搭建|特装展台制作设计|展览特装公司 | 照相馆预约系统,微信公众号摄影门店系统,影楼管理软件-盟百网络 | 物流之家新闻网-最新物流新闻|物流资讯|物流政策|物流网-匡匡奈斯物流科技 | 缠绕机|缠绕膜包装机|缠绕包装机-上海晏陵智能设备有限公司 | 找培训机构_找学习课程_励普教育| TPE_TPE热塑性弹性体_TPE原料价格_TPE材料厂家-惠州市中塑王塑胶制品公司- 中塑王塑胶制品有限公司 | 北京森语科技有限公司-模型制作专家-展览展示-沙盘模型设计制作-多媒体模型软硬件开发-三维地理信息交互沙盘 | 有机废气处理-rto焚烧炉-催化燃烧设备-VOC冷凝回收装置-三梯环境 | 渗透仪-直剪仪-三轴仪|苏州昱创百科| 亳州网络公司 - 亳州网站制作 - 亳州网站建设 - 亳州易天科技 | 期货软件-专业期货分析软件下载-云智赢 | 上海软件开发-上海软件公司-软件外包-企业软件定制开发公司-咏熠科技 | 北京网站建设-企业网站建设-建站公司-做网站-北京良言多米网络公司 | 电脑刺绣_绣花厂家_绣花章仔_织唛厂家-[源欣刺绣]潮牌刺绣打版定制绣花加工厂家 | 珠海网站建设_响应网站建设_珠海建站公司_珠海网站设计与制作_珠海网讯互联 |