當前位置:編程學習大全網 - 源碼下載 - ThinkPHP 中系統函數有哪些

ThinkPHP 中系統函數有哪些

首先給大家介紹ThinkPHP函數詳解:M方法 M方法用於實例化壹個基礎模型類,和D方法的區別在於: 1、不需要自定義模型類,減少IO加載,性能較好; 2、實例化後只能調用基礎模型類(默認是Model類)中的方法; 3、可以在實例化的時候指定表前綴、數據庫和數據庫的連接信息; D方法的強大則體現在妳封裝的自定義模型類有多強,不過隨著新版ThinkPHP框架的基礎模型類的功能越來越強大,M方法也比D方法越來越實用了。 M方法的調用格式: M('[基礎模型名:]模型名','數據表前綴','數據庫連接信息') 我們來看下M方法具體有哪些用法: 1、實例化基礎模型(Model) 類 在沒有定義任何模型的時候,我們可以使用下面的方法實例化壹個模型類來進行操作: //實例化User模型 $User = M('User'); //執行其他的數據操作 $User->select(); 這種方法最簡單高效,因為不需要定義任何的模型類,所以支持跨項目調用。缺點也是因為沒有自定義的模型類,因此無法寫入相關的業務邏輯,只能完成基本的CURD操作。 $User = M('User'); 其實等效於: $User = new Model('User'); 表示操作think_user表。M方法和D方法壹樣也有單例功能,多次調用並不會重復實例化。M方法的模型名參數在轉換成數據表的時候會自動轉換成小寫,也就是說ThinkPHP的數據表命名規範是全小寫的格式。 2、實例化其他公***模型類 第壹種方式實例化因為沒有模型類的定義,因此很難封裝壹些額外的邏輯方法,不過大多數情況下,也許只是需要擴展壹些通用的邏輯,那麽就可以嘗試下面壹種方法。 $User = M('CommonModel:User'); 改用法其實等效於: $User = new CommonModel('User'); 因為系統的模型類都能夠自動加載,因此我們不需要在實例化之前手動進行類庫導入操作。模型類CommonModel必須繼承Model。我們可以在CommonModel類裏面定義壹些通用的邏輯方法,就可以省去為每個數據表定義具體的模型類,如果妳的項目已經有超過100個數據表了,而大多數情況都是壹些基本的CURD操作的話,只是個別模型有壹些復雜的業務邏輯需要封裝,那麽第壹種方式和第二種方式的結合是壹個不錯的選擇。 3、傳入表前綴、數據庫和其他信息 M方法有三個參數,第壹個參數是模型名稱(可以包括基礎模型類和數據庫),第二個參數用於設置數據表的前綴(留空則取當前項目配置的表前綴),第三個參數用於設置當前使用的數據庫連接信息(留空則取當前項目配置的數據庫連接信息),例如: $User = M('db2.User','think_'); 表示實例化Model模型類,並操作db2數據庫中的think_user表。 如果第二個參數留空或者不傳,表示使用當前項目配置中的數據表前綴,如果操作的數據表沒有表前綴,那麽可以使用: $User = M('db1.User',null); 表示實例化Model模型類,並操作db1數據庫中的user表。 如果妳操作的數據庫需要不同的用戶賬號,可以傳入數據庫的連接信息,例如: $User = M('User','think_','mysql://user_a:1234@localhost:3306/thinkphp'); 表示基礎模型類用Model,然後對think_user表進行操作,用user_a賬號進行數據庫連接,操作數據庫是thinkphp。 第三個連接信息參數可以使用DSN配置或者數組配置,甚至可以支持配置參數。 例如,在項目配置文件中配置了: 'DB_CONFIG'=>'mysql://user_a:1234@localhost:3306/thinkphp'; 則可以使用: $User = M('User','think_','DB_CONFIG'); 基礎模型類和數據庫可以壹起使用,例如: $User = M('CommonModel:db2.User','think_'); 如果要實例化分層模型的話,利用公***模型類的方式,我們可以使用: M('UserLogic:User'); 來實例化UserLogic,雖然這樣做的意義不大,因為可以用 D('User','Logic'); 實現同樣的功能。 ThinkPHP函數詳解:R方法 R方法用於調用某個控制器的操作方法,是A方法的進壹步增強和補充。關於A方法的用法見這裏。 R方法的調用格式: R('[項目://][分組/]模塊/操作','參數','控制器層名稱') 例如,我們定義了壹個操作方法為: class UserAction extends Action { public function detail($id){ return M('User')->find($id); } } 那麽就可以通過R方法在其他控制器裏面調用這個操作方法(壹般R方法用於跨模塊調用) $data = R('User/detail',array('5')); 表示調用User控制器的detail方法(detail方法必須是public類型),返回值就是查詢id為5的壹個用戶數據。如果妳要調用的操作方法是沒有任何參數的話,第二個參數則可以留空,直接使用: $data = R('User/detail'); 也可以支持跨分組和項目調用,例如: R('Admin/User/detail',array('5')); 表示調用Admin分組下面的User控制器的detail方法。 R('Admin://User/detail',array('5')); 表示調用Admin項目下面的User控制器的detail方法。 官方的建議是不要在同壹層多太多調用,會引起邏輯的混亂,被公***調用的部分應該封裝成單獨的接口,可以借助3.1的新特性多層控制器,單獨添加壹個控制器層用於接口調用,例如,我們增加壹個Api控制器層, class UserApi extends Action { public function detail($id){ return M('User')->find($id); } } 然後,使用R方法調用 $data = R('User/detail',array('5'),'Api'); 也就是說,R方法的第三個參數支持指定調用的控制器層。 同時,R方法調用操作方法的時候可以支持操作後綴設置C('ACTION_SUFFIX'),如果妳設置了操作方法後綴,仍然不需要更改R方法的調用方式。 以上內容給大家分享了ThinkPHP函數詳解之M方法和R方法,希望對大家有所幫助。

  • 上一篇:安卓語音助手哪個好?
  • 下一篇:楠溪江音樂節已經開始搶票了。妳知道哪些明星會出席嗎?
  • copyright 2024編程學習大全網