国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開發(fā) > ThinkPHP > 正文

TP ci 對(duì)比 thinkphp 和 CI 區(qū)別

2024-09-09 15:20:00
字體:
供稿:網(wǎng)友

首先說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方法),該控制器的其它的操作都沒用了(不能訪問了).

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 新闻| 岗巴县| 崇仁县| 开封县| 镇康县| 淅川县| 林口县| 台州市| 陆川县| 秀山| 康马县| 镇沅| 龙岩市| 玛沁县| 望都县| 东至县| 上高县| 永定县| 乌兰察布市| 寿光市| 砀山县| 松潘县| 莱西市| 金湖县| 彭水| 延边| 吴江市| 正阳县| 陈巴尔虎旗| 酉阳| 南涧| 聂荣县| 天柱县| 海原县| 安岳县| 周口市| 格尔木市| 萝北县| 韶山市| 中西区| 犍为县|