ThinkPHP大寫單字母函數(shù).docx_第1頁(yè)
ThinkPHP大寫單字母函數(shù).docx_第2頁(yè)
ThinkPHP大寫單字母函數(shù).docx_第3頁(yè)
ThinkPHP大寫單字母函數(shù).docx_第4頁(yè)
ThinkPHP大寫單字母函數(shù).docx_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

ThinkPHP 單字母函數(shù)A() 內(nèi)部實(shí)例化控制器D() 實(shí)例化自定義模型類M() 實(shí)例化一個(gè)基礎(chǔ)模型類R() 調(diào)用某個(gè)控制器的操作方法L() 啟用多語言的情況下,設(shè)置和獲取當(dāng)前的語言定義N() 計(jì)數(shù)器方法G() 包括標(biāo)記位置和區(qū)間統(tǒng)計(jì)兩個(gè)功能F() 用于簡(jiǎn)單數(shù)據(jù)緩存,并且只能支持文件形式C() 用于設(shè)置、獲取,以及保存配置參數(shù)方法詳解:A方法用于在內(nèi)部實(shí)例化控制器,調(diào)用格式:A(項(xiàng)目:/分組/模塊,控制器層名稱)最簡(jiǎn)單的用法:$User = A(User);表示實(shí)例化當(dāng)前項(xiàng)目的UserAction控制器(這個(gè)控制器對(duì)應(yīng)的文件位于Lib/Action/UserAction.class.php),如果采用了分組模式,并且要實(shí)例化另外一個(gè)Admin分組的控制器可以用:$User = A(Admin/User);也支持跨項(xiàng)目實(shí)例化(項(xiàng)目的目錄要保持同級(jí))$User = A(Admin:/User);表示實(shí)例化Admin項(xiàng)目下面的UserAction控制器3.1版本增加了分層控制器的支持,所以還可以用A方法實(shí)例化其他的控制器,例如:$User = A(User,Event);實(shí)例化UserEvent控制器(對(duì)應(yīng)的文件位于Lib/Event/UserEvent.class.php)。實(shí)例化控制器后,就可以調(diào)用該控制器中的方法,不過需要注意的情況是,在跨項(xiàng)目調(diào)用的情況下,如果你的操作方法 有針對(duì)當(dāng)前控制器的特殊變量操作,會(huì)有一些未知的問題,所以,一般來說,官方建議需要公共調(diào)用的控制器層單獨(dú)開發(fā),不要有太多的依賴關(guān)系。D方法應(yīng)該是用的比較多的方法了,用于實(shí)例化自定義模型類,是ThinkPHP框架對(duì)Model類實(shí)例化的一種封裝,并實(shí)現(xiàn)了單例模式,支持跨項(xiàng)目和分組調(diào)用,調(diào)用格式如下:D(項(xiàng)目:/分組/模型,模型層名稱)方法的返回值是實(shí)例化的模型對(duì)象。D方法可以自動(dòng)檢測(cè)模型類,如果存在自定義的模型類,則實(shí)例化自定義模型類,如果不存在,則會(huì)實(shí)例化Model基類,同時(shí)對(duì)于已實(shí)例化過的模型,不會(huì)重復(fù)去實(shí)例化。D方法最常用的用法就是實(shí)例化當(dāng)前項(xiàng)目的某個(gè)自定義模型,例如:/ 實(shí)例化User模型$User = D(User);會(huì)導(dǎo)入當(dāng)前項(xiàng)目下面的Lib/Model/UserModel.class.php文件,然后實(shí)例化UserModel類,所以,實(shí)際上的代碼可能和下面的等效:import(.Model.UserModel);$User = new UserModel();但是如果使用D方法的話,如果這個(gè)UserModel類不存在,則會(huì)自動(dòng)調(diào)用new Model(User);并且第二次調(diào)用的時(shí)候無需再次實(shí)例化,可以減少一定的對(duì)象實(shí)例化開銷。D方法可以支持跨分組和項(xiàng)目實(shí)例化模型,例如:/實(shí)例化Admin項(xiàng)目的User模型D(Admin:/User) /實(shí)例化Admin分組的User模型D(Admin/User)注意:要實(shí)現(xiàn)跨項(xiàng)目調(diào)用模型的話,必須確保兩個(gè)項(xiàng)目的目錄結(jié)構(gòu)是并列的。3.1版本開始,由于增加了分層模型的支持,所以D方法也可以實(shí)例化其他的模型,例如:/ 實(shí)例化UserService類$User = D(User,Service); / 實(shí)例化UserLogic類$User = D(User,Logic);D(User,Service);會(huì)導(dǎo)入Lib/Service/UserService.class.php,并實(shí)例化,等效于下面的代碼:import(.Service.UserService);$User = new UserSerivce();M方法用于實(shí)例化一個(gè)基礎(chǔ)模型類,和D方法的區(qū)別在于:1、不需要自定義模型類,減少IO加載,性能較好;2、實(shí)例化后只能調(diào)用基礎(chǔ)模型類(默認(rèn)是Model類)中的方法;3、可以在實(shí)例化的時(shí)候指定表前綴、數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)的連接信息;D方法的強(qiáng)大則體現(xiàn)在你封裝的自定義模型類有多強(qiáng),不過隨著新版ThinkPHP框架的基礎(chǔ)模型類的功能越來越強(qiáng)大,M方法也比D方法越來越實(shí)用了。M方法的調(diào)用格式:M(基礎(chǔ)模型名:模型名,數(shù)據(jù)表前綴,數(shù)據(jù)庫(kù)連接信息)我們來看下M方法具體有哪些用法:1、實(shí)例化基礎(chǔ)模型(Model) 類在沒有定義任何模型的時(shí)候,我們可以使用下面的方法實(shí)例化一個(gè)模型類來進(jìn)行操作:/實(shí)例化User模型$User = M(User); /執(zhí)行其他的數(shù)據(jù)操作$User-select();這種方法最簡(jiǎn)單高效,因?yàn)椴恍枰x任何的模型類,所以支持跨項(xiàng)目調(diào)用。缺點(diǎn)也是因?yàn)闆]有自定義的模型類,因此無法寫入相關(guān)的業(yè)務(wù)邏輯,只能完成基本的CURD操作。$User = M(User);其實(shí)等效于:$User = new Model(User);表示操作think_user表。M方法和D方法一樣也有單例功能,多次調(diào)用并不會(huì)重復(fù)實(shí)例化。M方法的模型名參數(shù)在轉(zhuǎn)換成數(shù)據(jù)表的時(shí)候會(huì)自動(dòng)轉(zhuǎn)換成小寫,也就是說ThinkPHP的數(shù)據(jù)表命名規(guī)范是全小寫的格式。2、實(shí)例化其他公共模型類第一種方式實(shí)例化因?yàn)闆]有模型類的定義,因此很難封裝一些額外的邏輯方法,不過大多數(shù)情況下,也許只是需要擴(kuò)展一些通用的邏輯,那么就可以嘗試下面一種方法。$User = M(CommonModel:User);改用法其實(shí)等效于:$User = new CommonModel(User);因?yàn)橄到y(tǒng)的模型類都能夠自動(dòng)加載,因此我們不需要在實(shí)例化之前手動(dòng)進(jìn)行類庫(kù)導(dǎo)入操作。模型類CommonModel必須繼承Model。我們可以在CommonModel類里面定義一些通用的邏輯方法,就可以省去為每個(gè)數(shù)據(jù)表定義具體的模型類,如果你的項(xiàng)目已經(jīng)有超過100個(gè)數(shù)據(jù)表了,而大多數(shù)情況都是一些基本的CURD操作的話,只是個(gè)別模型有一些復(fù)雜的業(yè)務(wù)邏輯需要封裝,那么第一種方式和第二種方式的結(jié)合是一個(gè)不錯(cuò)的選擇。3、傳入表前綴、數(shù)據(jù)庫(kù)和其他信息M方法有三個(gè)參數(shù),第一個(gè)參數(shù)是模型名稱(可以包括基礎(chǔ)模型類和數(shù)據(jù)庫(kù)),第二個(gè)參數(shù)用于設(shè)置數(shù)據(jù)表的前綴(留空則取當(dāng)前項(xiàng)目配置的表前綴),第三個(gè)參數(shù)用于設(shè)置當(dāng)前使用的數(shù)據(jù)庫(kù)連接信息(留空則取當(dāng)前項(xiàng)目配置的數(shù)據(jù)庫(kù)連接信息),例如:$User = M(db2.User,think_);表示實(shí)例化Model模型類,并操作db2數(shù)據(jù)庫(kù)中的think_user表。如果第二個(gè)參數(shù)留空或者不傳,表示使用當(dāng)前項(xiàng)目配置中的數(shù)據(jù)表前綴,如果操作的數(shù)據(jù)表沒有表前綴,那么可以使用:$User = M(db1.User,null);表示實(shí)例化Model模型類,并操作db1數(shù)據(jù)庫(kù)中的user表。如果你操作的數(shù)據(jù)庫(kù)需要不同的用戶賬號(hào),可以傳入數(shù)據(jù)庫(kù)的連接信息,例如:$User = M(User,think_,mysql:/user_a:1234localhost:3306/thinkphp);表示基礎(chǔ)模型類用Model,然后對(duì)think_user表進(jìn)行操作,用user_a賬號(hào)進(jìn)行數(shù)據(jù)庫(kù)連接,操作數(shù)據(jù)庫(kù)是thinkphp。第三個(gè)連接信息參數(shù)可以使用DSN配置或者數(shù)組配置,甚至可以支持配置參數(shù)。例如,在項(xiàng)目配置文件中配置了:DB_CONFIG=mysql:/user_a:1234localhost:3306/thinkphp;則可以使用:$User = M(User,think_,DB_CONFIG);基礎(chǔ)模型類和數(shù)據(jù)庫(kù)可以一起使用,例如:$User = M(CommonModel:db2.User,think_);如果要實(shí)例化分層模型的話,利用公共模型類的方式,我們可以使用:M(UserLogic:User);來實(shí)例化UserLogic,雖然這樣做的意義不大,因?yàn)榭梢杂肈(User,Logic);實(shí)現(xiàn)同樣的功能。R方法用于調(diào)用某個(gè)控制器的操作方法,是A方法的進(jìn)一步增強(qiáng)和補(bǔ)充。R方法的調(diào)用格式:R(項(xiàng)目:/分組/模塊/操作,參數(shù),控制器層名稱)例如,我們定義了一個(gè)操作方法為:1. classUserActionextendsAction2. publicfunctiondetail($id)3. returnM(User)-find($id);4. 5. 那么就可以通過R方法在其他控制器里面調(diào)用這個(gè)操作方法(一般R方法用于跨模塊調(diào)用)1. $data=R(User/detail,array(5);表示調(diào)用User控制器的detail方法(detail方法必須是public類型),返回值就是查詢id為5的一個(gè)用戶數(shù)據(jù)。如果你要調(diào)用的操作方法是沒有任何參數(shù)的話,第二個(gè)參數(shù)則可以留空,直接使用:1. $data=R(User/detail);也可以支持跨分組和項(xiàng)目調(diào)用,例如:1. R(Admin/User/detail,array(5);表示調(diào)用Admin分組下面的User控制器的detail方法。1. R(Admin:/User/detail,array(5);表示調(diào)用Admin項(xiàng)目下面的User控制器的detail方法。官方的建議是不要在同一層多太多調(diào)用,會(huì)引起邏輯的混亂,被公共調(diào)用的部分應(yīng)該封裝成單獨(dú)的接口,可以借助3.1的新特性多層控制器,單獨(dú)添加一個(gè)控制器層用于接口調(diào)用,例如,我們?cè)黾右粋€(gè)Api控制器層,1. classUserApiextendsAction2. publicfunctiondetail($id)3. returnM(User)-find($id);4. 5. 然后,使用R方法調(diào)用1. $data=R(User/detail,array(5),Api);也就是說,R方法的第三個(gè)參數(shù)支持指定調(diào)用的控制器層。同時(shí),R方法調(diào)用操作方法的時(shí)候可以支持操作后綴設(shè)置C(ACTION_SUFFIX),如果你設(shè)置了操作方法后綴,仍然不需要更改R方法的調(diào)用方式。L方法用于啟用多語言的情況下,設(shè)置和獲取當(dāng)前的語言定義。調(diào)用格式:L(語言變量,語言值)設(shè)置語言變量除了使用語言包定義語言變量之外,我們可以用L方法動(dòng)態(tài)設(shè)置語言變量,例如:L(LANG_VAR,語言定義);語言定義不區(qū)分大小寫,所以下面也是等效的:L(lang_var,語言定義);不過規(guī)范起見,我們建議統(tǒng)一采用大寫定義語言變量。L方法支持批量設(shè)置語言變量,例如:$langlang_var1 = 語言定義1;$langlang_var2 = 語言定義2;$langlang_var3 = 語言定義3;L($lang);表示同時(shí)設(shè)置3個(gè)語言變量lang_var1 lang_var2和lang_var3。-more-獲取語言變量$langVar = L(LANG_VAR);或者:$langVar = L(lang_var);如果參數(shù)為空,表示獲取當(dāng)前定義的全部語言變量(包括語言定義文件中的):$lang = L();或者我們也可以在模板中使用$Think.lang.lang_var來輸出語言定義。N方法屬于計(jì)數(shù)器方法,被用于核心的查詢、緩存統(tǒng)計(jì)的計(jì)數(shù)和統(tǒng)計(jì)。但是其實(shí)可以用于應(yīng)用的其他計(jì)數(shù)用途,用法比較簡(jiǎn)單,調(diào)用格式:N(計(jì)數(shù)位置,步進(jìn)值)例如,我們要統(tǒng)計(jì)頁(yè)面中的查詢次數(shù),可以用1. N(read,1);表示每次執(zhí)行到該位置都會(huì)引起計(jì)數(shù)器加1,到頁(yè)面結(jié)束之前,我們就可以用1. $count=N(read);來統(tǒng)計(jì)當(dāng)前頁(yè)面執(zhí)行的查詢數(shù)目。如果你希望計(jì)數(shù)器每次增加5,那么可以改變步進(jìn)值,例如:1. N(score,5);需要注意的是,N方法頁(yè)面執(zhí)行完畢后的統(tǒng)計(jì)結(jié)果不會(huì)帶入下次統(tǒng)計(jì)。G方法的作用包括標(biāo)記位置和區(qū)間統(tǒng)計(jì)兩個(gè)功能,下面來看下具體用法:標(biāo)記位置G方法的第一個(gè)用法就是標(biāo)記位置,例如:1. G(begin);表示把當(dāng)前位置標(biāo)記為begin標(biāo)簽,并且記錄當(dāng)前位置的執(zhí)行時(shí)間,如果環(huán)境支持的話,還能記錄內(nèi)存占用情況??梢栽谌魏挝恢谜{(diào)用G方法標(biāo)記。運(yùn)行時(shí)間統(tǒng)計(jì)標(biāo)記位置后,我們就可以再次調(diào)用G方法進(jìn)行區(qū)間統(tǒng)計(jì)了,例如:1. G(begin);2. /.其他代碼段3. G(end);4. /.也許這里還有其他代碼5. /進(jìn)行統(tǒng)計(jì)區(qū)間6. echoG(begin,end).s;G(begin,end) 表示統(tǒng)計(jì)begin位置到end位置的執(zhí)行時(shí)間(單位是秒),begin必須是一個(gè)已經(jīng)標(biāo)記過的位置,如果這個(gè)時(shí)候end位置還沒被標(biāo)記過,則會(huì)自動(dòng)把當(dāng)前位置標(biāo)記為end標(biāo)簽,輸出的結(jié)果類似于:1. 0.0056s默認(rèn)的統(tǒng)計(jì)精度是小數(shù)點(diǎn)后4位,如果覺得這個(gè)統(tǒng)計(jì)精度不夠,還可以設(shè)置例如:1. G(begin,end,6).s;可能的輸出會(huì)變成:1. 0.005587s內(nèi)存開銷統(tǒng)計(jì)如果你的環(huán)境支持內(nèi)存占用統(tǒng)計(jì)的話,還可以使用G方法進(jìn)行區(qū)間內(nèi)存開銷統(tǒng)計(jì)(單位為kb),例如:1. echoG(begin,end,m).kb;第三個(gè)參數(shù)使用m表示進(jìn)行內(nèi)存開銷統(tǒng)計(jì),輸出的結(jié)果可能是:1. 625kb同樣,如果end標(biāo)簽沒有被標(biāo)記的話,會(huì)自動(dòng)把當(dāng)前位置先標(biāo)記位end標(biāo)簽。如果環(huán)境不支持內(nèi)存統(tǒng)計(jì),則該參數(shù)無效,仍然會(huì)進(jìn)行區(qū)間運(yùn)行時(shí)間統(tǒng)計(jì)。忘掉debug_start、debug_end吧,大道至簡(jiǎn),你懂的F方法其實(shí)是S方法的一個(gè)子集功能,僅用于簡(jiǎn)單數(shù)據(jù)緩存,并且只能支持文件形式,不支持緩存有效期,因?yàn)椴捎玫氖荘HP返回方式,所以其效率較S方法較高,因此我們也稱之為快速緩存方法。F方法的特點(diǎn)是:簡(jiǎn)單數(shù)據(jù)緩存;文件形式保存;采用PHP返回?cái)?shù)據(jù)方式加載緩存;支持子目錄緩存以及自動(dòng)創(chuàng)建;支持刪除緩存和批量刪除;寫入和讀取緩存1. F(data,testdata);默認(rèn)的保存起始路徑是DATA_PATH(該常量在默認(rèn)配置位于RUNTIME_PATH.Data/下面),也就是說會(huì)生成文件名為DATA_PATH.data.php的緩存文件。注意:確保你的緩存標(biāo)識(shí)的唯一,避免數(shù)據(jù)覆蓋和沖突。下次讀取緩存數(shù)據(jù)的時(shí)候,使用:1. $Data=F(data);我們可以采用子目錄方式保存,例如:1. F(user/data,$data);/緩存寫入2. F(user/data);/讀取緩存就會(huì)生成DATA_PATH.user/data.php 緩存文件,如果user子目錄不存在的話,則會(huì)自動(dòng)創(chuàng)建,也可以支持多級(jí)子目錄,例如:1. F(level1/level2/data,$data);如果需要指定緩存的起始目錄,可以用下面的方式:1. F(data,$data,TEMP_PATH);獲取的時(shí)候則需要使用:1. F(data,TEMP_PATH);刪除緩存刪除緩存也很簡(jiǎn)單,使用:1. F(data,NULL);第二個(gè)參數(shù)傳入NULL,則表示刪除標(biāo)識(shí)為data的數(shù)據(jù)緩存。支持批量刪除功能,尤其是針對(duì)子目錄緩存的情況,假設(shè)我們要?jiǎng)h除user子目錄下面的所有緩存數(shù)據(jù),可以使用:1. F(user/*,NULL);又或者使用過濾條件刪除,例如:1. F(user/a*,NULL);C方法是ThinkPHP用于設(shè)置、獲取,以及保存配置參數(shù)的方法,使用頻率較高。了解C方法需要首先了解下ThinkPHP的配置,因?yàn)镃方法的所有操作都是圍繞配置相關(guān)的。ThinkPHP的配置文件采用PHP數(shù)組格式定義。由于采用了函數(shù)重載設(shè)計(jì),所以用法較多,我們來一一說明下。設(shè)置參數(shù)1. C(DB_NAME,thinkphp);表示設(shè)置DB_NAME配置參數(shù)的值為thinkphp,由于配置參數(shù)不區(qū)分大小寫,所以下面的寫法也是一樣:-more-1. C(db_name,thinkphp);

溫馨提示

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

評(píng)論

0/150

提交評(píng)論