D一種H設(shè)計模式_第1頁
D一種H設(shè)計模式_第2頁
D一種H設(shè)計模式_第3頁
D一種H設(shè)計模式_第4頁
D一種H設(shè)計模式_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

一、DPT介紹PHP為什么在主流的應(yīng)用中總是那么不出色,總是不如.Net/Java,就是因為在PHP處理大型應(yīng)用的時候,那些不完整的面向?qū)ο髾C(jī)制、數(shù)據(jù)庫處理的單一,不通用性等等,影響了PHP做大型應(yīng)用。那么,如何來改變這個狀況呢?當(dāng)然就是需要引進(jìn)一些新的設(shè)計方法,把PHP中不健全的面向?qū)ο髾C(jī)制完整起來,進(jìn)行更好的PHP大中型應(yīng)用的開發(fā)。從Java過來的MVC模式非常流行,而且已經(jīng)有部分已經(jīng)引伸進(jìn)了PHP領(lǐng)域,設(shè)計模式的引進(jìn),就是為了更好的控制項目開發(fā)。今天我要說一種設(shè)計模式,類似于MVC,它叫DPT模式。其實有時候我也覺得有點象Java里面的DAO(DataAccessObject),不過DAO是夾在業(yè)務(wù)邏輯層和數(shù)據(jù)庫資源層之間的,而DPT更多的是把業(yè)務(wù)邏輯也封裝在類里,和DAO層在相同的內(nèi)容中。D-Data,數(shù)據(jù)收集層P-Php,PHP數(shù)據(jù)調(diào)用層T-Template,模板層首先,我們要對它進(jìn)行簡單的了解。Data,就是我們的數(shù)據(jù)層,它不是數(shù)據(jù)庫抽象類,而是通過數(shù)據(jù)庫接口,執(zhí)行一些SQL,把數(shù)據(jù)獲取的過程,一般把這種操作封裝在類里面,就形成了我們的數(shù)據(jù)收集層。Php,就是對我們收集的數(shù)據(jù)進(jìn)行整理,規(guī)劃,同時解析模板進(jìn)行數(shù)據(jù)的顯示。Template,模板層,就是我們的HTML頁,里面不包含任何PHP代碼,只有模板標(biāo)簽的內(nèi)容,通過它來控制數(shù)據(jù)在頁面中有格式的顯示。我們這里三層中,每一層都是鼓勵由一個人來開發(fā),然后通過PHPDoc之類的工具,把源代碼中的API生成文檔,由P層的人進(jìn)行調(diào)用。那么,在實際的項目開發(fā)中,它是怎么運作的呢,我們又如何把這種設(shè)計模式引進(jìn)我們的項目中呢?我們下面將運用一個實際的項目來講解DPT模式。閱讀一下內(nèi)容必須具備基本的PHP4的面向?qū)ο缶幊獭?shù)據(jù)庫抽象類、模板等知識。我們目前為了加速PHP的開發(fā),都使用PHP封裝了部分功能,比如數(shù)據(jù)庫操作抽象類,模板類等等,這些都是為了開發(fā)復(fù)雜應(yīng)用而應(yīng)運而生的。目前比較主流的數(shù)據(jù)庫抽象類有phplibdb、PEAR::DB、ADODB等等,模板處理類有phplibtemplate、smartTemplate、Smarty等等。本文中都是使用PHPGroup推薦的產(chǎn)品,數(shù)據(jù)口抽象類使用PEAR::DB,模板處理類使用Smarty,如果對這兩個類庫不熟悉的讀者,請參考文章后面的鏈接。二、項目體系結(jié)構(gòu)下面我們來構(gòu)建我們基于DPT模式的PHP應(yīng)用。(以下部分內(nèi)容參考《MVC模式、類封裝還是黑客代碼》)考文件目錄結(jié)劉構(gòu)(只涉及裂到關(guān)鍵的目坡錄)勻class尸沒質(zhì)類庫,包含兔所有的數(shù)據(jù)械收集層熊templ毯ate

牧據(jù)模板文件存海放目錄喚inclu歐de

著會常用庫,包哈括啦PEA臭R沿、死Smart貫y腫等類庫,同協(xié)時還有自己瞧定義的基本勢函數(shù)什confi窗g.inc慎.姻php

材鷹基本配置文加件,包括數(shù)際據(jù)歐庫配置,其尾他基本信息惜配置繭secur挑ity.i零nc.ph播p枝裹安全處理頁驟,主要多傳油遞的變量進(jìn)急行處理勞init.銜inc.患php攤error芬.php

橡發(fā)錯誤處理牢頁儀泥場副clas讀s督目錄中存放扯了我們數(shù)據(jù)鵝收集層中的穗內(nèi)容,一般俘的建議是每克個類文件只軟是針對一個訓(xùn)表進(jìn)行操作柜,比對如戚cmsMe撞ssage濤.clas吊s.ph稿p液,那么這個感類就是屬于努功咸能盛CM露S絕里面的,只晉負(fù)責(zé)操額作著Messa噸g恢e陽這個表。所便有的數(shù)據(jù)庫罷交互和操作凍都是封裝在首類里的,障在排P雹層不允許出題現(xiàn)任何直接陪操作數(shù)據(jù)庫偶的語句。抄終市templ塑at枝e工目錄析中萍存垂放了我們的延網(wǎng)頁模板,寇模板中都是深使純用緩Smart服y鄰標(biāo)簽進(jìn)行排傷列的,同時糞,在模板中稻,都是建議比使得用攀J膊S攜+傅CS償S付來控制頁面坡,模板中只缸有經(jīng)DI抽V效標(biāo)簽來簡單當(dāng)?shù)呐虐孢w,這樣,非淘常利于網(wǎng)站紐改版和更換琴皮膚。政貧所inclu搭d樸e旨目錄就是對雄常用文件的欠包含,比筆如孝PEAR:詳:D必B吐類擔(dān)、胞Smart鉆y兼類庫文件等毛。佛confi晨g.inc語.ph吊p療就是基本的俱配置文件,雙包括數(shù)據(jù)庫喊、基本常量翅等等鈴,居secur思ity.i繭nc.ph涉p類是安全處理猛頁,我們這蔥里主要是做便一個變量的窯安全檢查,需下面內(nèi)容我乳們將仔細(xì)介嘆紹覆。景init.扒inc.p延h像p凈是一個初始嫂化操作的頁煤面,包括穩(wěn)初復(fù)始聽化數(shù)據(jù)庫鏈識接,實例化望模板皺處理類因等等操作投,鑼error有.ph掏p狠是錯誤信息伸處理頁棒,所有的錯隙誤信息通掉過征UR雞L逃編碼后轉(zhuǎn)到蹦該頁。叨寫三、項目基視本配置代碼左搜關(guān)鍵頁代強(qiáng)碼實例:溫/**味

*co例nfig.糾inc.p攀hp油

*泥括配置文件頓

*/擾

/*續(xù)蠶數(shù)據(jù)庫配夕置之*/長defin污e('DB香_HOST尿','l米o(hù)calh民ost')卸;

/火/修數(shù)據(jù)庫主機(jī)盡defin團(tuán)e('DB暢_USER種','r影oot')做;

/嚼/偽數(shù)據(jù)庫鏈接源用戶逼defin畏e('DB易_PASS債',''訓(xùn));

題/輔/條連接密碼荒defin顛e('DB薯_然N游AME',倆'cms問');

菜減/痕/魚默認(rèn)數(shù)據(jù)庫攀defin法e('DB活_PORT毛','3講306')薄;

/品/本數(shù)據(jù)庫端口夢defin域e('DB槐_TYP怪E','珠mysql午');

斃/書/那數(shù)據(jù)庫類型野defin援e('DB愿_OPT'矮,'1'證);

辱/羞/首是否長期鏈園接戰(zhàn)/*能赤模板信息配風(fēng)置負(fù)*/焦defin西e('TP絕L_TEM媽PLATE科_DIR'緞,'./誼templ書ate/'股);

廳/溉/攀模板目錄樓defin樂e('TP促L_COM走PILE_良DIR',獨'./t甜empla村te/te感mplat退es_c/酬');/醋/迅模板編濾譯命目蛇錄帳defin典e('TP盆L_C嫁ONFIG掘S_DIR冠','.墨/te摔mplat朝e/con若figs/穴');

欺/限/趕模板配置文拐件目錄棍defin滑e('T鉤PL_CA卸CHE_D木IR',

更'./t修empla蠻te/ca閉che/'鞏);

/望/做模板緩存目欺錄斤defin棗e('TP灑L_LIF曉TTIME徒',

'樂1');

/躍/程緩存時間剝defin咱e('TP些L_CAC考HEING痕',

'銅true'動);

萍/溉/燕是否緩存真defin勢e('TP纏L_LEF良T_DEL領(lǐng)IMITE保R','丈{');

/簡/擊左邊界符抹defin熱e企(數(shù)'TPL_目RIGHT粉_DELI選M薦ITER'踐,'}'敵);

底/剛/畜右邊界符萄/*芒扯網(wǎng)站路徑配螺置車*/升defin爸e('RO觸OT_PA侮TH',襲di嫁r(nóng)name積(__FI搖LE__)勒);

溫/澡/底網(wǎng)站所在根楊目錄香defin棍e('UR齒L_PAT鬼H',d景irnam檢e($_S杰ERVER則[PHP_擱SELF]叢));

凡/軍/濟(jì)網(wǎng)跟站尋UR劉L慮地址路徑耳defin啄e('DB意_PATH還',RO診OT_PA冤TH.'/宜inclu奧de/db版');

酬//PEA杏R::D杜B衫目錄核defin咸e('TP贏L_PAT曲H',R角OOT_P奮ATH.'禽/沒i帳nclud弊e/sma錘rty')含;析

//S丹mart雞y攏目錄呢/**饅波*sec磨urity壘.inc.梳php州

*焦拖安全過濾文砌件奴

*/材/*淋驟過濾規(guī)蜂則刮*/總$arr_鳥filtr矩ate=蔥arra草y("'"漲,'"'殊,"\"擔(dān));世/*稿球過濾函簽數(shù)寺*/攻funct汗ionv牌ar_fi伴ltrat眾e($va務(wù)r)省{驗

glo嶺bal$算arr_f抗iltra塵te;脾

f友oreac羅h($a叫rr_fi襖ltrat卵eas炒$valu醉e)夾

{投砍

if碼(ere熱gi($v蠟ar,$威val鬧u丘e)){刺咳榨

ret撥urnt資rue;叔蠻陰}葬子

re飽turn尊false盆;情

}耕}哈/*揀畫獲取不同版拘本下意的粗GE頌T笨和尾POS內(nèi)T棋數(shù)為組幫*/盯if(p鴿hpver怎sion(鵲)<'伐前'){耍

$巾get=幸&$HT注TP_GE賀T_VAR劣S;港

$臉post階=&$H鍬TTP_P援OST_V雹ARS;速}els貼e{供

$亭get=叛&$_G擋ET;席

$房post徹=&$_畢POST;并}偵/*仍攔檢鋤查蔬GE展T女變蜂量藍(lán)*/鞋if(c歷o典u飯nt($g蠢et))謠{森靠forea紛ch($與post超as漠$get_娛var)歸{寫蒙

if貧(var境_filt獸rate(乖$ge笛t_var訓(xùn))){架腔冶

exi拉t('Co別mmit杰getp立arame塵terf減alsit熟y');釋墊

}撤

}夢}態(tài)/*彈始檢余查程POS肯T姜變舒量德*/殘if(c爽ount(補(bǔ)$post請)){纏

f白o(hù)reac單h($p繳osta襲s$po陸st_va煎r){船睜

if牙(var姑_filt記rate(逐$post納_va滋r蠻)){館凱使侄exit插('Com超mitp趴ost環(huán)para悉meter功fals飛ity')寸;床首

}奉

}宿}案其實,母以上過濾的撕方法也不是循最好的,建瞎議參考我的叨另兩篇防注目入文章獲取赴更好的方法暖,鏈接參考塞附錄。遵/**形

*er亮ror.p服hp祖

*癥干錯誤處理頁醉面恢

*/帳if(!卷isset夕($get備[msg]揀)){詞

ex謹(jǐn)it('N渾otco援mmit旦param叫eter'逐);匯}謙echo們"Erro攻rMes循sage:漫".$穗get[m鹽sg];遠(yuǎn)echo是"溫<鍋p><a駛href=熔'java飯s喉cript醋:hist葡ory.b兵ack著()'能>沖返回上一公頁漿</a>"喜;涂就是一由些錯誤處理厲的作用,一級般出客的姥GE裙T衣方式傳蝴遞過來的消吩息都是經(jīng)液過笑urlen郵code(席)政過的字符。滅/*底

*in牌it.in窗c.php鄭

*軟克初始化程序倡*/嘴requi惱re_on柿ce(di斬rname輸(__FI牽LE__)倉.'con幕fig.i柱nc.ph屋p');夾requi臥re_on浮ce(RO悲OT_PA偉TH.'s濕ecuri帶ty.in剛c.php列');準(zhǔn)requi哲re_on闊ce(DB迎_PATH遲.'DB.瞧php倘'展);孝requi細(xì)re_on量ce(仁TPL_P倘ATH.'雕Smart滿y.c宗lass.口php')亦;驕/*濱鄭初始化數(shù)據(jù)烘庫鏈勢接竹*/垮$db=緊DB::棕con眉nect(隨"DB_T爸YPE:/攏/DB_U跳SER@D想B_PAS歲S:DB_抗HOST/日DB_NA至ME",隙DB_OP派T);握if(D寧B::is窩Erro(愿$db))篩{蓮

r食eturn倉$dg-夠>getM種essag稅e();難}菌$tpl掀=&ne啊wSma勉rty()坊;鄰/*坑璃初始化模們板抬*/轎$tpl-充>temp因lates仰_dir之=TPL睡_TEMP湖LAT手E茅_DIR;鋸$tpl-督>comp劫ile_d縣ir=須TPL_C嘉OMP雹ILE_D烈IR;貨$tpl-輪>cach基e_dir召

=T吐PL_CA滴CHE_D剃I品R;腰$tpl-癢>conf懶igs

何=TPL乖_CONF天IGS_D符IR;緒$tpl-衛(wèi)>life特time

慘=TP雁L_LIF泄TTIME影;搬$tpl-竟>cach裕ing

疾=TPL悼_CACH紀(jì)EING;傘$tpl-捆>left板_deli牲miter品=TP病L_LEF里T_DEL般IMITE魂R;態(tài)$tpl-買>righ膏t_del熄imite捕r=T慰PL_RI腳GH撈T_DEL錯I融M狼ITER;販基本文棉件描述完畢駁。代碼寫了遍不少,只是術(shù)為了更好的尋理解這個模洋式。嚴(yán)到四、框架實春際開發(fā)承說明:撲我們以下項帶目代碼都是騾以熊cm斗s證數(shù)據(jù)庫侄中智t清opi咐c于表做例子,求代碼只是為甲了演示框架書結(jié)構(gòu),沒有勇對代碼進(jìn)行架測試,不保缸證能夠正常事運行。批紅垮topi狂c看的表結(jié)構(gòu):始CREAT如ETAB切LE`t冠opic`補(bǔ)(六

`id宿`int慌(11)研NOTN爪ULLa廢uto_i航ncrem鬧ent,非

`ti萌tle`泳varch犁ar(25鑼5)NO疲TNUL畢Ldef法ault刮'',園

`ad警dtime仙`仆int(1及1)de泳fau壘ltNU雨LL,汪粱`aut蝶hor`蒙varch及ar(譯50)d莖efaul垂tNUL濾L,子

`ty溜pe`i華nt(11寄)def延au化ltNU兼LL,付

`op平tion`質(zhì)int(片11)d勞efaul雙tNUL定L,先

PRI潮MARY挎KEY

順(`id`制),摧

KEY訪`id`古(`id浩`)灌);咳(一躲)惹Dat餅a陣層:數(shù)據(jù)采必集層寺馳屆Dat攤a喚層主要就是憲針對數(shù)據(jù)庫備的所有操作啄都封裝起來遼,然后通過幻接口的形式巖提供隸給壯Ph倍p席層進(jìn)行調(diào)用伸,同時低在巴Dat丹a決層里也封裝性了一些原始向的數(shù)據(jù)庫操奧作(類似載于皮Jav帥a燭中旨的故DA摸O漲)省。閑一襪般剖Dat幅a奶層都是舌類的形式,住保存在我們讓上面佩的毀/cla嚷s闊s蔑目錄下,一針般的準(zhǔn)則是堡一個類文件樹操作一個數(shù)括據(jù)表,就是督說不管具體失的業(yè)務(wù)邏輯勺如何,張所有的數(shù)據(jù)它表操作都是駁封裝在一個維類文件里的山。比如說我濟(jì)們有一個數(shù)久據(jù)表叫碑做燭topi趨c原,那么我們訊對應(yīng)操作的腹類文件就是言:能topic翻.clas目s.ph歸p權(quán)。其實這里到是可以做擴(kuò)甘展的,比如腎說,我們的汽項目非常龐船大,有很多鼻內(nèi)容,比如裝包括頭有掃CM縮S詞、察Blo父g稼、誤BB婆S墨等等,那么悄我們就必須得給每一個欄錫目分配一個盯數(shù)據(jù)庫,那律么針對當(dāng)前苗操作數(shù)據(jù)庫欄的話,就使窄用類中封裝鈴的鏈接方法鍛進(jìn)行鏈接,浴就可以拋棄刃我們上欣面緒init隨.inc.乳ph模p月中初勇始化的操作倉,而操作在刊類里面進(jìn)行潛的鏈接。拜假設(shè)我王們目前操作舟的欄目塌是廉CM紅S戶系統(tǒng),數(shù)據(jù)迅庫名叫哄做渣cm億s歐,那么我們劃下面構(gòu)造著一個操稀作肚cm宜s麗數(shù)據(jù)庫里面具的港topi脾c瓶表的類來。趟/**哲

*cm恐s_top初ic.cl東ass.p臭hp桃

*蝕咸文章處理類覺

*/仔class恭cmsT鳳opic技{喉

var億cmsDB霧Name;儉

/惰/慌數(shù)據(jù)庫名眼

var確cTabl底eName奸;

/鍵/伴當(dāng)前操作的瞇表名缸

var諒cDsn;貸

/騎/盒數(shù)據(jù)鏈接源僵

var喬cDebu鳥g;

/氣/起是否打開調(diào)僻試刻,賤1陽為是楊,應(yīng)0方為否子

var忘cDbP掛ointe剩r

/購/謙鏈接資源藝

var懸cfe均tchMo昂de

/堤/介獲取數(shù)據(jù)庫秩資料的方式團(tuán)

var估cEnco昨de

/讓/植數(shù)據(jù)滲庫中數(shù)據(jù)保粗存的編碼格顧式,默認(rèn)必是禁UTF-8鄉(xiāng)

/*秒盒構(gòu)造函感數(shù)廣*/脈

func引tion松cmsTo己pic()她

{色

/蹄/塊配置信息鞠從慰confi矮g.inc迎.ph亦p蛾中設(shè)置它

$th算is->c灣fetch畫Mode嬌=DB_刺FETCH政MODE_白DEFAU褲LT;禽

$th息is->c索Table湯Name田="to殿pic";竹

$th內(nèi)is->c抗Dsn=狼"mys乳ql://頭".躲辰

DB_給USER.令":".溜

DB燒_PASS鳴."@爛".適

DB悟_HOST傍."/".鬧

DB名_NAME它;跟

$th爭is->煉cEnco撕de=便"utf8府";秧

}威

/*揀察鏈接數(shù)據(jù)問庫挺*/迫

func般tion惜conne完ctDat畝abase窗()板

{雪

if典(!is_摘objec疊t($cD餅bPoin道ter))適搖

{碑

$t非his->速cDbPo姓inter默=DB暮::con宋nect(騙$this孤->cDs肺n);勝

if短($th冶is->c飲Encod扎e=="u懷tf8")擠{尊

$祥this-阻>cDbP祝ointe押r->qu公ery("目set敗name騰s'ut號f8'")題;筋

}登

$t港his->貴cDbPo姓int桐er->s棚etFet貼chMod鉆e($th腫is->c丸fetch訊Mode)掩;創(chuàng)

if扒(DB:杰:isEr明ror($紀(jì)this-花>cDbP椅ointe紡r)){臉

r謎eturn歐fals勁e;需

}封

re遞turn游$this迅->cDb答Point穗er;元

}顛

}賞

/*盼暮關(guān)閉數(shù)據(jù)庫把連絹接甩*/蘇

func遵tion撐close挽Datab被ase()迫

{恨

if現(xiàn)(i憤s_obj策ect($菜this-胡>cDbP爽ointe秒r))漆{榜

$t合his->請cDbPo摩inter屆->dis擠conne劈ct();倍局}脈

}濁

/*--梳-----撤-----炭---甘禁數(shù)據(jù)庫基本睬操姻作暢----愈-----肝-----鑰*/鞠

/*蚊域插入操蛙作沒*/友

func儀tion葡inser溪t($ar蓬r)閥

{功

if(諒!is_a叢rray(務(wù)$arr)大||c說ount(隨$arr)僑==0齡){羨

re翁turn和false洽;腸

}焦

if(斷""==妨$thi求s->cT脫ableN重ame)污retur停nfal矮se;鉆芳$db遠(yuǎn)=$th扎is->c扭onn抹ectDa炮tabas鼓e();斜

$re滴s=$娘db->a笛utoEx韻ecute巖($thi階s->cT焰ableN刻ame,$巷arr,D嶺B_AUT緞OQUER證Y_INS礎(chǔ)ERT);尊遙

if(魯DB::i獄sErro壟r($re俯s)){貍

re徒turn景$res;陣

}el椒se{統(tǒng)

$i枯nsert詞Id=滋($db-播>getO壽ne("s著elect悠LAST托_INSE搶RT_ID奸();")屈);叢

if抬($ins嘆ertId籮>0)碑{叔

r宋eturn采$ins俊ertId掙;幻

}送else爪{薄

r艱eturn憶true郵;贊

}譜

}列

}犯剩

/*殼甚更新操鞏作桶*/悼斷funct淡ionu齒pdate蓋($id,涂$arr)味

{辣

if(量""!=譜$id券&&!(碗is_ar鉗ray($艷arr))竭){啟

re逐turn惠false群;詳

}席

$db朗=$t海his->址conne急ctDat機(jī)abase級();界

$re輕s=$翠db->a害utoEx扎ecute印($thi栽s->cT邁ableN墊ame,$占arr,D健B_AUT醬OQUER慮Y_UPD陵ATE,"踏id=慶'芝$id'"波);麥

if(油DB::i跳sErro喘r($re收s)){添

re衫tu畜rnfa博lse;擺

}el是se{炮

re圈turn走true;棟

}痛

}希

/*坑旬刪除操識作欣*/帆

func略tion徐delet椅e($id晨)夫

{奇

$db序

=$車this-息>conn什ectDa蜻tabas景e();哭

$re袖s=$混db->q歌uery(鉆"DELE荒TEFR蜓OM".汽$this蹄->cTa誦bleNa嘉me."驗WHERE畢id=粥'$id拖'");餃

if(昨DB::i陣sErro嘗r($re眨s)){趴拆

ret番urnf失alse;織

}el謀se{鏈

re宋turn采true;躬

}原

}哄}濤上面的腫代碼一療個很基本的待針對一個表碧操作的類雛魯形已經(jīng)描述窩出來了,包汽括連接數(shù)據(jù)數(shù)庫,基本的型數(shù)據(jù)庫原始腔操作都有了邀。你肯定會極問,為什么墊沒有哲把練selec眉t理的操作封裝售進(jìn)去?主要偉是因廁為將selec團(tuán)t賢是選SQ句L煙里最復(fù)雜的斤操作,不可統(tǒng)能寫那么通剃用的一個方坐法去操作它匹,所以好不罵如不寫,自授由發(fā)揮。帶那么我禽們需要加上兼一些基本的添功能呢?比液如讀取內(nèi)容聾、新增加一艱篇文章等操除作,那么我這們還必須在希類里面添加怠一些方法,誼比如我們增塌加提取一篇米文章內(nèi)容、金提蓮取指定時間蝦的文章、提備取指定類別剃的文章、統(tǒng)捉計目前所有燈文章的總數(shù)允等操作。示/**爆

*cm霉s_top優(yōu)ic.cl嶼ass.因php薄

*間碑文章類增強(qiáng)續(xù)

*/布class辮cmsT忙opic饞{紅

//.言.衰.尊上面已經(jīng)描弄述的方法省須略繞

/**秩

*襯掠函概數(shù)紗:get俗Topic射Conte比ntByI貧d()伐

*懲酒功爽能嘗:蹦面獲取指懂定竭I暫D尺的文章的內(nèi)攏容抽

*形伯參朝數(shù)碎:$id竿鞏叔指定要獲取聽的比ID毛米*主儉快$col垃s

嶺聯(lián)要提取的字巴段值座

*馬擴(kuò)返咸回遮:慘慘成功返回數(shù)紡據(jù)集數(shù)組,即失敗返回錯戒誤信息節(jié)

*/生

func滲tion危get宵Topic奶Conte略ntByI億d($id芹,$co只ls="*綁")估

{烏

$db胖=$t候his慣->con單nect甚Datab椒ase($宋this-陶>cDsn手);井

$sq濃l="勞SELEC雕T$co駛lsFR模OM".肝$thi小s->cT橫ableN方ame.命"WHE卷REid隱='$涉id'";暫

$re根sult晝=$db冶->get晉All($嚼sql);券

if喊(DB::致isErr碑or($r嚼esult架)){貨

re戲turn蛋$resu輔lt->g購etMes域sage(造);闊

}e粘lse{濃

$d婚b->di扶sconn京ect()沈;小

re脂turn鑼$resu先lt;鞏

}月

}員

/**葬

*穩(wěn)餃函施數(shù)蟻:get朵Topic亡BySpe止cifyT境ime()少

*充嚴(yán)功速能鴿:鍛啊獲取指定時鑄間的文章的閥列表叉

*芳汁參憲數(shù)棗:$st守artTi計me含曬指定開始時糧間廁邀*賞奇鉆$end醫(yī)Time計赤結(jié)束時間除

*

懇$cols折話哨要提取的字撈段值扶

*脊起返投回盾:化派成功返回數(shù)肺據(jù)集數(shù)組,咱失敗返回錯拴誤信息勾

*/般

func骨tion濕getTo此picBy打Speci農(nóng)fyTim檢e($st夏artTi筆me=0,蚊$end托Time=展0,$c慣ols="某*")們

{搭

$db柳=$t糟his->弟conne毅ctDat可ab鼓ase($翅t(yī)his憑->cDs咬n);我

$st吵art=艘($st守artTi勉me==撒0)?外"":厚"WHE印REad憶dtime披>$s番tartT通ime";覺

$en踏d=(闖$endT矩ime=藥=0)乒?""格:"AN刑Dadd猴time背<$st鴉artTi蘇me";僅

$sq苦l(xiāng)="荷SELEC嫁T$co因lsFR描OM".筒$thi浮s->cT牌ableN賄ame.吃"".$嗓start葉."古".$e隱nd;啄

$re雅sult挽=$db榨->get柔All($壤sql);鬼

if擔(dān)(DB:礙:isEr愚r(nóng)or(均$resu洗lt))炊{區(qū)

re靈turn蒸$resu廟lt->g裕etMes岔sage(恭);常

}e鏈lse{財

$d屑b->di顛sconn簡ect()集;壯

re墓turn艇$resu訂lt;患

}辮

}研

/**棉

*跨車函宗數(shù)拆:get貞Topic禿ByTyp躁e()鴿

*展粱功濱能迫:膠恢獲取指定類好別的文章的市列表游

*湖領(lǐng)參旦數(shù)蝕:$ty每pe

臟犯指定的類型忽

*

陪$cols噴毛拍要提取的字叉段值駁宜*饅鉗返嗓回齊:悉飾成功返回數(shù)煮據(jù)集數(shù)組,設(shè)失敗返回錯酷誤信息矮

*/是

func您tion映getTo粘picB康yType斬($ty炊pe,$浸cols=遮"*")袍

{稻

$db狗=$t兔his->窯conne遠(yuǎn)ctDat劃abase移($thi摔s->cD革sn);暮

$sq鉗l="塵SELEC健T$co貨lsFR臺OM".敗$thi舅s->cT啊ableN隨ame.趨"WHE保REty掏pe=嘗'$typ福e'";勺

$re慨sult醫(yī)=$db穴->get根All($呆sql);震

if魄(DB::價isErr敲or($r輝esult今)){薪

re替turn椅$resu嘩lt->g伐etMes鄰sage(蜂);脅

}e廚lse{咱

$柔db->d圈isco屢nnect拐();套

re昆turn桐$resu乎lt;慮

}慣

}掛呢

/**亭

*鞭倍函盟數(shù)充:get坡Topic際Sum()飼

*徐齊功四能箱:掏虹獲取所有文靠章總數(shù),如畫果指定類別獻(xiàn),則獲取指令定類別總數(shù)春

*碧近參前數(shù)糞:$ty勤pe

辨提指定的類型捎

*我拖返惠回記:罪口成功返回獲潤取的總數(shù),盯失敗返回錯剪誤信息舒

*/馬

func幟tion奉getTo診picSu烏m($ty乞pe=""朋)捕

{脾

$db失=$t仰his造->con謹(jǐn)nectD置ataba晚se($t臟his->挑cDsn)已;隱

$ty毫peStr政=($廉ty語pe==唐"")曉?""指:"逢WHERE素type浪='$棉type'擱";資

$sq振l="縣SELEC蓋Tcou喝nt(id擊)FRO賢M".序$this燦->cTa駱bleNa君me."睬".$t紡ypeSt撫r;攜

$re堪sult誠=$db能->get洽One($輩sql);姑

if錦(DB::駁isErr末or($r婚esult伙)){征

re遞turn范$resu災(zāi)lt->g鞋etMes碗sage(梅);育

}侄else耐{諒

$d初b->di金sconn偽ect()更;括

re離turn仇$resu劍lt;酒

}略

}飛}起上面我霞們構(gòu)造了一溉些數(shù)據(jù)提取越類,這應(yīng)該蠅就是我畏們問Dat倒a貓層的核心了采。寫方法的鴨時候要盡量堆考慮到擴(kuò)展甘性,比如對洞列的提取,恨比如一個方仇法適合多種慮情況,比如軟排序等等,沿考慮的越多彎,以后維護(hù)娃起來就比較邀容易,當(dāng)然臥,我推薦的凝方法是一個息方法盡量就怠做一件事情寨,如果一個背函數(shù)要做多慨個事情,那稈么就寫成多址個函數(shù),這仗樣便于代碼迫重用和維護(hù)輪性,我個人以認(rèn)為一個方娃法最用不要販超杯過聚10昌0竊行?;既绻灁?shù)中有涉及緞到數(shù)據(jù)庫的誦操作,一定腹記得陳結(jié)尾的時候若把數(shù)據(jù)關(guān)閉慣掉,不然很愁容易把服務(wù)時器資源占用醬光。當(dāng)然,柴你也可以驟在美PH沾P味層去關(guān)閉連塵接。比如,勤你高需要很多次面調(diào)用同一弟個方法,那墳么這個方法唐如果反復(fù)的湖連接數(shù)據(jù)庫矩又關(guān)閉數(shù)據(jù)梅庫,也很浪應(yīng)費資源,而煉且速度慢,門這個時候就擁可以把關(guān)閉著數(shù)據(jù)庫的操艷作鞋在區(qū)Ph璃p銳層進(jìn)行關(guān)閉洽,你可以先鳳構(gòu)造好一個賞方法來進(jìn)行堪,比如我們羽上面殖的伏clos果eData棟base(筑)姜歷方法。顛(二饒)犬Ph典p逆層:數(shù)據(jù)調(diào)舌用層劈爐歸PH蛾P(guān)特層主要就是水把遇從序Dat討a擺層收集的數(shù)幅據(jù)再這一層例進(jìn)行調(diào)用。妹因為我們基嚷本的原則就站是把所有跟徑數(shù)據(jù)庫的操五作都封裝揉在謙Dat唱a平層里,在其澆他層都不涉探及到任爭何的直接對矛數(shù)據(jù)庫的操拉作,這樣能音夠進(jìn)行良好諒的封裝,這疼樣有點類似影于負(fù)JS套P困和趟Javab首ea谷n卵,任Java欺bea販n貪的類負(fù)責(zé)和胸數(shù)據(jù)庫交互糞,凍JS漆P協(xié)負(fù)責(zé)調(diào)獄用悠Javab擦ea熊n鋪來輸出數(shù)據(jù)贊。我們這里陰的位PH項P貸層就相當(dāng)弱于虜JS手P貧層,前面券的次Dat墻a歉層就相當(dāng)臣于率Javab盾ea演n籠層,這樣玻般璃他們之間拆的耦合度,道能夠方便程懼序日后的維化護(hù)。罰我們這暖里昂的緩PH拐P輩層主要就是跪復(fù)雜從數(shù)據(jù)瘡庫種提取數(shù)剃據(jù),完成一愛些簡單的邏韻輯,然后把匠數(shù)據(jù)輸出虧到帝Templ通at嬌e譯(模板層)夏?,F(xiàn)在我們繩利用示例代義碼來看江看陽PH青P陳層是如何調(diào)緣用幅Dat錢a尸層的數(shù)據(jù)的科。壯/**醒

*to勵pic_梢list.晉php絕

*閑匆文章列表程來序笛

*/干/*咱傅包含基本文邪件鏡*/垮requi葛re_on米ce(淋"init鉛.inc將.php"扣);腳requi智re_on身ce("c什lass/典cms_t堅opic.喝class幸.php"東);喜/失/籌實例臣化多Dat怎a隸層對象架$topi賄c=n老ewcm劍sTopi摔c();貸/禮/劈獲取文章類寇型變量留$topi仁cType認(rèn)=in驚tval(度get("床type"貓));遲/儲/靠從尤Dat判a燃層中把數(shù)據(jù)器提取過來竟$topi雞cList讀=ge欺tTopi嘗cByTy銀pe($t擋opicT撐ype);菌/環(huán)/箭給模板變孤量賦值后輸打出頁臭$tpl-副>assi崖gn("t貴opic"制,$to棉picLi蓮st);杜$tpl-此>寄assig厲n("t踩opic.依html"株);甜代碼是炸不是很簡單率?就是把數(shù)乘據(jù)獲取過來錫,然后解析潮到模板層中主去處理,所側(cè)以這樣如果端以后出現(xiàn)問脈題改起來比剖較容易,比房如是數(shù)據(jù)獲基取的問題,棉那么直接改惱上面的類文槐件就行,如孤果是模板顯乖示的問題,稱那么直接修帽改模板層中寄的對應(yīng)的模床板頁就可以嶺,非常便于淹維護(hù)。昌(三竭)碧Templ怖at歷e誤層:模板層紀(jì)這個模素板層就是我游們常說的網(wǎng)丈頁了,不過目這里就是包紹含了一攀些垃Smart菊y掘的模板變量宇和去HTM以L繼混和露,模板頁處仁理的時候就和對頁面中的符模板變量進(jìn)貪行替換,最欄后我們看到先的結(jié)果就是艙模板頁妙和泄PH態(tài)P尋層中的程序牌輸出扯混和的結(jié)果打。槍塌一般模板頁轟設(shè)計的時候準(zhǔn),最好遵米循漂We賤b質(zhì)標(biāo)準(zhǔn),就是翠說盡量在頁丑面中不使用叫表格擱等愧htm鋤l艱標(biāo)簽來控制盞頁面,而是概使聲用鍛di體v舍層來存放數(shù)誕據(jù),使粘用捎cs事s皮樣式表來控爸制頁面布局墳,這樣對包獸括扇JavaS噸crip停t奔腳本的編寫額,以后頁面霧的改版等等甜非常有好處卸。而且如果刮要還模板也數(shù)很簡單,只貸需要胖把撤cs惕s胳文件替換就半可以達(dá)到效訴果。當(dāng)然,志如果愚對鹽we啞b逃標(biāo)準(zhǔn)不了解適,那么建議樹去閱讀一下媽《網(wǎng)站重構(gòu)握》這本書。踏我們下訊面就簡單的矩描述一肯下麻Tem裕plat圍e粘(模板層)勤的代碼是如鏈何的。西{*幻悶加載頭部文蠟件劍*}劇{incl捐udef吹ile="盞h茂eader腹.htm洞l"}挽{*號鼠模板主聲體懸*}鮮<div>掙

{*鹿凱左邊導(dǎo)航船條興*}高</div埋>艘<div>圣

<h3傲>千文章列牛表無</h3>剃

{sec腸tion首name=購topic杰List兼loop=釋$topi籃c}肢御羅標(biāo)題自:圍<ahr素ef=""既>{$to龜pic[t砍opicL殃ist].譽(yù)title蜻|esca葉pe:"h臺tml"|慎trunc智ate:3抹0:"..蛛.":tr哲ue}</定a>|申信姥時間出:鄉(xiāng){$top叮ic[敢topic炊List]梁.addt級ime|d四ate_f哪ormat萍:"%服Y騙年鞭%串m下月純%吧d次日介"}|筍乖刑作尺者漢:弟{$top陪ic島[topi趕cList孤].aut再hor|e蝕scape敗:"htm更l"}<b稀r/>敵

{sec殺tione姥lse}堡猜現(xiàn)暫時沒有任旦何文章渡

{/se開ction辨}米</div券>健{*惡煮加載底部文純件痕*}丘{incl撓udef據(jù)ile="脈foot.絹html"替}糧模板頁愁中大致可能心有一根些留JavaS辛crip醉t歪程序,或者貌有樣式文件轎,一般使用寧樣式文件來邊控制頁面的廊布局和顯示慚效果。我們塘這里沒有詳憤細(xì)的描述,安在實際項目攜中可以由網(wǎng)胃頁制作人員斷去負(fù)責(zé)。界商五、使愈用惠DP勁T輪模式的項目澇規(guī)劃鑒一般在足所有的軟件貢項目或者是蘇網(wǎng)站坡項目中,要漁保證一個想項目能夠順客利完整的完型成,那么便歪需要技術(shù)主土管或者架構(gòu)就師良好的設(shè)往計和管理。包一般所有項改目中人是最甘難控制的因企素,你可以飾把項目指定薯的非常完善控,架構(gòu)可以傻選擇的非常吼合理,但是同你不能控制相人的因素,伐不能保證項盜目的中的某公個成員可能懼在任何時候爺離開項目。蓬當(dāng)干在電PH但P妄項目中,如江果一個項目畫角色忽然的房離去,可能丹導(dǎo)致項目要般停頓,要重做新找人來接打替,影響了丹項目的進(jìn)度調(diào),那么如何海有效的控制湊和解決這些蠟問題。渡在一個癢使必用范DP贈T宇設(shè)計模式嫁的項目中,消項目中個個朱角色分別有券網(wǎng)頁設(shè)計師霞、網(wǎng)頁制作到人員、客戶檢端腳蘇本陸JavaS木crip摧t耍程序員、服梢務(wù)辰器摧端嫂PH沙P監(jiān)程序員。菊他們的分工侄都是什么呢獲?網(wǎng)頁設(shè)計環(huán)師負(fù)責(zé)設(shè)計妙網(wǎng)頁的界面法,生成效果足圖,然后由鄭網(wǎng)頁制作人格員去做成網(wǎng)齒頁,當(dāng)然,乖如果是遵舟循難We路b韻標(biāo)準(zhǔn)的項目任的話,那么忙網(wǎng)頁制作人壟員主要的任其務(wù)就是負(fù)責(zé)辨頁面布局樣貝式的編寫。錢客戶端程序瓦員主要是負(fù)滑責(zé)客戶端腳茅本的編寫,肢比如針對頁別面中需要使糠用廳的銳JavaS矩crip買t濫進(jìn)行編寫棉,戒PH零P軟程序員主要令是負(fù)責(zé)我們魔上哈面徑Data王&PHP踢&Te猜mplat示e脊?jié)娙龑拥拇a華編寫,當(dāng)然故,如果項目假足夠龐大,介完鄭全可以拆分丹出來,燈有金PH溪P盯程序員負(fù)膀責(zé)沿Dat陸a像層,爹有錄PH舉P且程序員負(fù)終責(zé)賠Ph嘆p毛和轉(zhuǎn)Templ錦at杏e婆層,分工清徑晰偽,房Ph食p島層程序員綠只是需要調(diào)添用勒Dat邪a笑層程序員已某經(jīng)寫好的類頃庫進(jìn)行調(diào)用載,不用關(guān)心準(zhǔn)類是如何實?,F(xiàn)的。晚這樣一濱個項目架構(gòu)啄下來,可以凈按照任務(wù)需漆要來安排某讀個模塊的人豎的數(shù)量,最劃大限度的把橫項目規(guī)劃好怒。當(dāng)然,項低目中一些必槐要的因素是積要考慮的,始比如,如何較讓網(wǎng)頁制作煌人員、客戶撫端腳本程序贏員哪和救PH輸P柱程序員良好垂的合作,那祖么就是分離盤他們的責(zé)任踏,比如,模折板頁必須劇由累PH誘P奏程序員來編中寫,然后提邀交間給撕JavaS末crip船t去程序員制作義客戶端腳本援,最后再么由網(wǎng)頁制作姥人員通缸過咐CS放S狗來控制布局泊,那海么崗Ph粥p宗程序員在模束板頁中就必漲須使夾用賴di濤v摩等標(biāo)簽來定駕義一個塊的殃數(shù)據(jù),如果橡任何一塊春出了問題,響那么對應(yīng)找菠相應(yīng)責(zé)任人封,就能夠很暮好的避免彼宵此推卸責(zé)任釘,或者權(quán)責(zé)馬不分的情況申,這樣有利隙于管理,也添有利于每個拿開發(fā)成員之志間的良好合劃作。獎為了防豎止項目失控裝,或者不會墓因為項目成支員的離開而溝影響項目的表進(jìn)度和管理掏,必須有相巨應(yīng)的方法和翻規(guī)則。我們鼓主要針誼對荒PH珍P惡程序員來進(jìn)列行描述,部雹分方法同樣喝適用于網(wǎng)頁健制作人員和份客戶端腳本晉程序員。錫握(邊1?。┚幋a規(guī)范態(tài)項目開駐發(fā)中為了便稠于維護(hù)和以彼后其他人接栽手代碼,必龜須統(tǒng)一弊編碼規(guī)范,緞包括對目錄公、文件名、撇類、函數(shù)、安變量、注釋駛等等都必須鑼遵循標(biāo)準(zhǔn),舉而且為了代摧碼的維護(hù),的必須要丟求標(biāo)PH磁P絞程序員編寫沿注設(shè)釋。目前基件本遵循的翻是門Fredr緒ikKr雨istia忙nse槐n染寫的沈《宿PHP殘寒編碼規(guī)范》垃,或者叉是院PEA戲R載中代碼的規(guī)緊范??兹绻鷽龃a為了做成貝接口,或者變需要做成參緞考的文檔方象便以后維護(hù)訊代碼,使衰用農(nóng)phpDo術(shù)c妥等工具,那之么為了能夠鋼使爬用絞PEA日R鎮(zhèn)包中棕的議phpDo壯c公能夠正常識皮別,所以一理般建議遵揀循圖PEA蜻R狡包的規(guī)范,差主要柄是打DP亭T慨模式陜中棋Dat府a(chǎn)床層中類的的前編碼必須規(guī)之范。咬共刻PEA課R贊中傲pear.元ph厲p飄中基類的部版分代碼:鹽class波PEAR啟{也

/第*香戶屬性的描繪述抱*/略

/苗/{{{胡prop套ertie哭s帳

/先**翠恥*Whe侵ther覺toen歸able仇inter舞nald客ebug構(gòu)messa溝ges.炕卷*陸著*@va思r

袍bool濁詠*@ac糕cess

煎priv巴ate劣維*/水

v報ar$_能debug斗=fa毛lse;忘融

/石/棵其他屬性省怪略釋...盟

/掙/}}}聚

/蛙*沒咬對方法的描燙述刻*/姥

/抽/{{{狡c六onstr債uctor盟

/岸**扣哥*Con霉struc貼tor.

塔Regi早sters片this朽obj炒ecti肝n享捆*$_P漂EAR_d云estru繭ctor_乞objec久t_lis臟tfor運dest詞ructo近remu乎latio睬nif喇a(chǎn)化綁*des幕truct途orob陪ject亦exist炸s.銅筍*謊跌*@pa辦rams腫tring垮$err晉or_cl遣ass

希(opti兩onal)步whic席hcla鋒ssto敵use緊for賓蟲*

e

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論