首先說Model吧:在TP中是一個(gè)表對(duì)應(yīng)一個(gè)Model,而且普通Model中只是一些自動(dòng)驗(yàn)證啊,自動(dòng)完成啊、還有數(shù)據(jù)字段信息啊一些東西;而CI中的Model則完全不同,一個(gè)Model不必約束于一個(gè)表,也就是說名字為abc的Model中你也可以查詢名字為def的表中的數(shù)據(jù),而且可以定義方法完成一些數(shù)據(jù)查詢,比如我可以在名為articles_model的Model中定義一個(gè)名字為get_articles的方法來獲取所有文章信息,當(dāng)某個(gè)Controller加載了這個(gè)Model后,就可以在相應(yīng)的Controller中用:
$this->articles_model->get_articles();
來方便地獲取所有文章信息,而對(duì)于TP來說,這些操作只能在Action類中完成,2.0版的TP已經(jīng)把View、Relation和Adv三個(gè)高級(jí)查詢model庫(kù)類定為不自動(dòng)加載了,看了一下手冊(cè),感覺除了View視圖查詢?nèi)菀子靡稽c(diǎn),另外兩個(gè)都不怎么好用,感覺用起來太復(fù)雜,還不如用原生的SQL查詢.
CI的Model還有一個(gè)使我很喜歡的方法就是dbprefix方法,在使用原生的sql查詢時(shí)使用這個(gè)函數(shù)使得修改數(shù)據(jù)庫(kù)表名前綴后你的代碼不需要經(jīng)過任何改動(dòng),在TP中我沒有發(fā)現(xiàn)類似的函數(shù),當(dāng)我用TP開發(fā)一個(gè)博客系統(tǒng)時(shí),發(fā)現(xiàn)關(guān)聯(lián)查詢很麻煩,于是想用原生的SQL查詢,卻沒有找到自動(dòng)增加數(shù)據(jù)庫(kù)表名前綴的方法,雖然可以自己修改TP的核心庫(kù)來實(shí)現(xiàn),但是還是覺得這樣有點(diǎn)不太好.
真的要感謝TP,如果不是TP,也許我就不會(huì)去關(guān)注CI了,當(dāng)我那天看了幾頁(yè)CI的英文文檔后,立馬就對(duì)它產(chǎn)生的深厚的興趣,于是第二天一起床就開始看CI的手冊(cè),雖然是從官網(wǎng)下的英文版的,不過它的手冊(cè)寫得很簡(jiǎn)潔、很周到,邊看邊操作,看完手冊(cè)后我就幾乎能熟練使用這個(gè)框架了,于是用它開發(fā)了一個(gè)博客系統(tǒng)。
CI的Model類簡(jiǎn)單易用,TP的Model類功能相對(duì)來說要強(qiáng)大一些,但是用起來個(gè)人感覺沒有那么方便。
其次,對(duì)于View,從功能上講,TP的View要更加強(qiáng)大一些,選擇更多一些,在TP中你可以選擇就用PHP作模板引擎,可以就用TP自身的模板引擎,也可以選擇用smarty等其它第三方模板引擎,而在CI中就只能用CI內(nèi)置的功能簡(jiǎn)單的模板引擎或者用原生的PHP代碼作模板,個(gè)人覺得用PHP作模板更好一些,一來省去了學(xué)習(xí)另外的模板引擎語(yǔ)法的麻煩,二來執(zhí)行效率更高一些,因些從View來講,選擇CI或者是TP都無所謂.
再次是Controller了,在CI中的應(yīng)用的控制器是繼承自核心類Controller的,TP中的控制器則是繼承于核心類Action,不過還是有不同的,在TP中,你可以把一些公共的變量或者在多個(gè)控制器中都要執(zhí)行的東西放在一個(gè)action里,假如這個(gè)action文件為CommonAction.class.php,在它的_initialize方法中可以執(zhí)行一些在多個(gè)控制器中都要執(zhí)行的代碼或者初始化一些多個(gè)控制器都要使用的變量,這樣,應(yīng)用的其它action只要繼承CommonAction 就可以實(shí)現(xiàn)了.
因?yàn)榭蚣茉诩虞d相應(yīng)action時(shí)首先會(huì)自動(dòng)加載那個(gè)CommonAction的,而在CI中就沒有這個(gè)方便的功能了,但是也可以自己寫一個(gè)library,在該library類的__construct方法里放一些代碼,然后在每個(gè)控制器中都加載這個(gè)library,這樣也可以實(shí)現(xiàn)像TP一樣的功能,不過相對(duì)來說麻煩了一些,TP還有一點(diǎn)比較靈活的就是,在這個(gè)控制器(action)里面可以執(zhí)行那個(gè)控制器中的函數(shù)(比如用A或者R函數(shù)來實(shí)現(xiàn)),在CI中則不行,你不能在這個(gè)控制器中執(zhí)行那個(gè)控制器中的函數(shù),還有就是TP可以定義一個(gè)名為EmptyAction的控制器,當(dāng)所有控制器都找不到時(shí),就調(diào)用這個(gè)Empty控制器。
這一點(diǎn)如果與empty方法配合,可以使得URL大大縮減,雖然CI和TP都支持空操作,不過這二者的空操作名稱不相同,實(shí)現(xiàn)的優(yōu)先級(jí)也不相同,在TP中的空操作(_empty方法)優(yōu)先級(jí)是最低的,也就是說當(dāng)當(dāng)前控制器的所有操作都找不到時(shí)才調(diào)用這個(gè)空操作;在CI中則恰恰相反,只要存在空操作(_remap方法),該控制器的其它的操作都沒用了(不能訪問了).
新聞熱點(diǎn)
疑難解答
圖片精選