ThinkPHP為一些常用的操作定義了快捷方法,這些方法具有單字母的方法名,具有比較容易記憶的特點。非常有意思的是,這些快捷方法的字母包含了ADSL字母,所以我們稱之為ADSL方法。A、D、S、L、C、F、U、I 這幾個快捷方法都在 /THINKPHP/Common/functions.php 這個文件中,下面我分別說明一下他們各自的功能和用法。
A() 加載Action類
D() 加載Model類
S() 全局緩存配置
L() 獲取語言定義
C() 獲取配置值
F() 快速文件數據讀取和保存 針對簡單類型數據 字符串、數組
U() 用於完成對URL地址的組裝
I() 快速創建一個對象實例
1.A 快速創建Action對象
$action=new UserAction();// 等同於以下寫法:$action=A("User");而且,如果當前的UserAction類還沒有引入的話,A方法會自動引入。並且具有單例模式的支持,不會重復創建相同的Action對象。
A方法支持跨項目調用,例如:
$action=A("User",'Admin'); //實例化Admin項目的UserAction類
2.D 快速創建模型數據對象
先定義好模型類,如UserModel,然後就可以用D()函數對數據進行操作了。例如:
先在"你的項目"/Lib/Model下建立一個名為UserModel.class.php的PHP腳本,內容如下:
class UserModel extends Model{}
然後,無需增加任何屬性和方法,就可以進行如下操作:
$User=D("User"); //實例化User對象,User是你在數據庫建立的一個名為"前綴_user"的數據表,也可以用$User=new UserModel()代替,進行實例化對象的操作。實例化之後,就可以對數據進行增刪查改等一系列操作了,如:
$User->find(1); //查找主鍵為1的記錄
我們在做用戶金幣或者是積分或者是投票的時候,需要對指定的字段自加1這時候我可以可以這樣寫
$User->score='(score+1)';$s->save(); 這樣我們會省下許多的步驟。
如果要修改指定的一個字段更可以簡寫為如下:
D('User')->setField('name','hehe','id=2');
D 方法和 M 方法的區別主要在於:
M方法不需要創建模型類文件,M方法不會讀取模型類,所以默認情況下自動驗證是無效的,但是可以通過動態賦值的方式實現;而D方法必須有創建模型類,我們可以用下面兩種方法去創建一個數據表的映射對象。
第一種:$Test=D('Test');
第二種:$Test=new Model('Test');
雖然這兩種都可以對數據進行select,insert,delete,udpate操作,在數據驗證上有很大的不同,用第一種方式實例一個模型就會有數據檢查功能,例如可以定義如果 title 沒有填寫的話就會提示 “請輸入標題” (這個是tp提供的一個自動驗證功能,當然也需要在相應的 model 中定義好驗證條件);
D方法可以自動檢測模型類,不存在時他會拋出一個異常。同時對於已實例化得得模型不會再去重復實例化(單例)。默認的D方法只能支持調用當前的項目(或者叫做應用)下的模型。例如:
$user=new UserModel();
等價於$user=D('user');
如果實例化的是一個空模型,例如:
$Demo=new Model();
那麼它等價於:
$Demo=M();
3.S 快速操作緩存方法
ThinkPHP把各種緩存方式都抽象成統一的緩存類來調用,而且ThinkPHP把所有的緩存機制統一成一個S方法來進行操作,所以在使用不同的緩存方式的時候並不需要關注具體的緩存細節。如:
S('data',$Data); //使用data標識緩存$Data數據
S('data',$Data,3600); //緩存$Data數據3600秒
$Data=S('data'); //獲取緩存數據
S('name',null); // 刪除緩存標識name
4.L 快速操作語言變量
L方法提供了多語言的支持,可以快速設置和獲取語言定義。
L('USER_INFO','用戶信息'); //設置名稱為USER_INFO 的語言變量
L('USER_INFO'); //獲取USER_INFO的語言變量值
//批量賦值
$array['USER_INFO']='用戶信息';$array['ERROR_INFO']='錯誤信息';
L($array);
5.C 快速操作配置變量,用法就是 C("這裡填寫在配置文件裡數組的下標")
C('USER_AUTH_ON',true); //設置名稱為USER_AUTH_ON 的配置參數
C('USER_AUTH_ON'); //獲取USER_AUTH_ON的變量值
同L一樣,C也支持批量賦值
注意:配置參數不區分大小寫
此外從1.5版本開始,C方法還支持二維數組的操作,例如:
C('USER.USER_TYPE',1);
C('USER.USER_AUTH_ON');
6. F 文件數據保存方法
F方法主要用於項目的文件數據的寫入、更改和刪除,其工作機理和S方法是類似的,區別在於用途不同,數據保存的目錄也不同,而且不能指定緩存方式,因為默認就是文件形式保存數據。F方法使用了var_export方法,所以只能支持簡單數據類型,不支持對象的緩存。
7. U 用於完成對URL地址的組裝,特點在於可以自動根據當前的URL模式和設置生成對應的URL地址
該函數格式為:U('地址','參數','偽靜態','是否跳轉','顯示域名');在模板中使用U方法而不是固定寫死URL地址的好處在於,一旦你的環境變化或者參數設置改變,你不需要更改模板中的任何代碼。在模板中的調用格式需要采用 {:U('地址', '參數'…)} 的方式。
U方法的用法示例:
U('User/add') // 生成User模塊的add操作地址
也可以支持分組調用:
U('Home/User/add') // 生成Home分組的User模塊的add操作地址
當然,也可以只是寫操作名,表示調用當前模塊的
U('add') // 生成當前訪問模塊的add操作地址
除了分組、模塊和操作名之外,我們也可以傳入一些參數:
U('Blog/read?id=1') // 生成Blog模塊的read操作 並且id為1的URL地址
U方法的第二個參數支持傳入參數,支持數組和字符串兩種定義方式,如果只是字符串方式的參數可以在第一個參數中定義,下面幾種方式都是等效的:
U('Blog/cate',array('cate_id'=>1,'status'=>1))
U('Blog/cate','cate_id=1&status=1')
U('Blog/cate?cate_id=1&status=1')