thinkphp框架起步認識

先看看thinkphp的文檔吧:這是我在網上找的一個不錯的鏈接地址,對自己有用,同時相信對讀者也有用吧。

http://doc.thinkphp.cn/manual/class.html

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ThinkPHP 跨模塊調用操作方法(A方法與R方法)

跨模塊調用操作方法
前面說了可以使用 $this 來調用當前模塊內的方法,但實際情況中還經常會在當前模塊調用其他模塊的方法。ThinkPHP 內置了 A 方法與 R 方法這兩個特殊的大寫字母方法來處理跨模塊調用的問題。

目前 Index 模塊內有 index 操作,User 模塊有 showName 操作,User 模塊及 showName 操作具體代碼如下:

  1. <?php?
  2. class?UserAction?extends?Action{?
  3. public?function?showName(){?
  4. echo?"我叫小明。";?
  5. }?
  6. }?
  7. ?>
我們將在 Index 模塊的 index 操作中調用上面的 showName 操作。
通過 A 方法跨模塊調用操作
A 方法用于實例化其他模塊(當于 new 關鍵字),模塊被實例化之后,就可以以對象的方式調用模塊內的操作。
在 Index 模塊的 index 操作中調用 User 模塊的 showName 操作實例:
  1. <?php?
  2. class?IndexAction?extends?Action{?
  3. public?function?index(){?
  4. header("Content-Type:text/html;?charset=utf-8");?
  5. //?實例化?User?模塊?
  6. $User?=?A('User');?
  7. //?調用?User?模塊中的方法?
  8. $User->showName();?
  9. }?
  10. }?
  11. ?>
A 方法還支持跨分組調用和跨項目調用模塊,語法如下:
A('<項目名://><分組名/>模塊名')
// 常用例子如下
A('User') //調用當前項目的 User 模塊,如上面的例子
A('Admin://User') //調用 Admin 項目的 User 模塊
A('Admin/User') //調用 Admin 分組的 User 模塊
A('Admin://Tool/User') //調用 Admin 項目 Tool 分組的 User 模塊

ThinkPHP 還提供了 R 方法,可直接調用其他模塊的操作方法,將上面使用 A 方法的例子更改為 R 方法:

  1. <?php?
  2. class?IndexAction?extends?Action{?
  3. public?function?index(){?
  4. header("Content-Type:text/html;?charset=utf-8");?
  5. //?調用?User?模塊中的方法?
  6. R('User/showName');?
  7. }?
  8. }?
  9. ?>
R 方法同樣也支持跨分組調用和跨項目調用方法,語法如下:
R('<項目名://><分組名/>模塊名/操作'<, array()>)
// 常用例子如下
R('User/showName') //調用當前項目的 User 模塊的 showName 方法,如上面的例子
R('Admin://User/showName') //調用 Admin 項目 User 模塊的 showName 方法
R('Admin/User/showName') //調用 Admin 分組 User 模塊的 showName 方法
R('Admin://Tool/User/info') //調用 Admin 項目 Tool 分組的 User 模塊的 info 方法
R 方法接收參數
R 方法也支持對調用的方法傳入參數,因為實際上調動的操作,可能是需要傳入參數的。
R 方法的第二個參數為數組,該數組將作為被調用操作的參數傳入。如下面的例子所示:
R( 'User/showName',array($_GET('id')) );//這個時候,你可以使用//http://localhost/Index.php/Index/output/name/gaoke訪問
該例子表示 showName 操作將接受 5 這樣一個參數。而對應的 showName 操作可能為:
  1. <?php?
  2. class?UserAction?extends?Action{?
  3. public?function?showName($id){?
  4. //?根據?id?參數獲取用戶信息的代碼?
  5. ? ? ?echo "你輸入的ID是:".$id;
  6. }?
  7. }?
  8. ?>

要傳入多個參數,那么將 R 方法的 array() 參數數組依次定義多個元素即可。

ThinkPHP 讀取配置信息與動態配置(C方法)

C 方法是 ThinkPHP 內置的特殊方法,用于在操作和模板里讀取配置文件里的配置信息或者動態配置參數。語法如下:
  1. C(?para_name,?value?)
參數說明
如果只有 para_name 參數時,表示讀取 para_name 配置參數的值;para_name 與 value 都存在時,表示設置 para_name 參數的值為 value。
C 方法讀取配置參數值
假設項目配置里有如下配置信息:

  1. /*?Cookie設置?*/?
  2. 'COOKIE_EXPIRE'?=>?3600,?//?Coodie有效期?
  3. 'COOKIE_DOMAIN'?=>?'.5idev.com',?//?Cookie有效域名?
  4. 'COOKIE_PATH'?=>?'/',?//?Cookie路徑?
  5. 'COOKIE_PREFIX'?=>?'',?//?Cookie前綴
下面是在模板里面讀取配置參數的例子:
  1. <title>{:C('COOKIE_EXPIRE')}</title>
配置文件中支持二維數組的配置,那么要讀取二維配置,可以使用 . 符號來表示層級:

  1. C('SITE_CONFIG.DOMAIN_NAME')
當讀取的參數沒有在配置文件里定義時,C 方法返回 NULL。
ThinkPHP 動態配置
ThinkPHP 慣例配置與項目配置都是通過預先定義配置文件的方式來配置需要的參數,而在具體的操作方法里面,還可以通過 C 方法來動態改變或新增配置參數。
下面的例子將 Coodie 有效期變更為 7200 秒:
  1. C('COOKIE_EXPIRE',7200);
同樣動態配置二維數組參數,通過 . 符號來區分層級關系:
  1. C('SITE_CONFIG.DOMAIN_NAME','example.com')

?D方法

?默認的 D方法 只能支持調用當前項目的模型,如果需要跨項目調用,需要使用:


  1. $User?=?D('User',?'Admin');?//?實例化?Admin?項目下面的?User?模型?
  2. $User?=?D('Admin.User');?//?啟用了項目分組

查看 D快捷方法 實例:《ThinkPHP 表單數據智能寫入 create 方法》
實例化空模型類

如果需要使用原生 SQL ,需要實例化一個空模型:

  1. $Model?=?new?Model();?
  2. //?執行原生?SQL?語句?
  3. $Model->query('SELECT?*?FROM?think_user');

ThinkPHP 中M方法和D方法的具體區別


閱讀:45???收藏
M方法和D方法的區別

ThinkPHP 中M方法和D方法都用于實例化一個模型類,M方法 用于高效實例化一個基礎模型類,而 D方法 用于實

例化一個用戶定義模型類。
使用M方法

如果是如下情況,請考慮使用 M方法:

對數據表進行簡單的 CURD 操作而無復雜的業務邏輯時
只有個別的表有較為復雜的業務邏輯時,將 M方法 與實例化 CommonModel 類進行結合使用

M方法 甚至可以簡單看著就是對參數表名對應的數據表的操作:

$User = M('User');

使用D方法

如果是如下情況,請考慮使用 D方法:

需要使用 ThinkPHP 模型中一些高級功能如自動驗證功能(create()方法中實現)、關聯模型等
業務邏輯比較復雜,且涉及的表眾多
將業務邏輯定義在了自定義的模型類里面(Lib/Model目錄下),而想在操作中實現這些業務邏輯

另外 D方法 不支持跨項目調用,需要使用:

  1. $User?=?D('User',?'Admin');?//?實例化?Admin?項目下面的?User?模型?
  2. $User?=?D('Admin.User');?//?啟用了項目分組

提示

啟用了項目分組后,Model 類并不必然對應著項目分組。多個項目組之間共有的模型類,統一放在 Model 目錄下

,可以直接使用D('ModelName') 實例化。而 D('User.UserInfo') 并不表示 User 一定是一個項目分組,也可以

僅僅是對 Model 下文件的一個分類目錄,D('User.UserInfo') 實例化的是 User 目錄下的 UserInfo 模型類。
總結

M方法 和 D方法 都可以在模型類文件不存在的情況下直接使用的,但顯然 M方法 更高效;但要使用模型類里面

業務邏輯,就必須使用 D方法。

一個比較形象的比喻就是:M方法 就如一臺剛裝好操作系統的電腦,只能使用一些基本功能;而 D方法 就如在裝

好的系統上再安裝了一些如 Office、QQ 等應用軟件,功能更加強大,同時整個電腦運行速度也變慢了。

以上是對 M方法和D方法區別的一些總結,M方法 和 D方法 要根據實際情況來具體選擇。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444914.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444914.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444914.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode403 青蛙過河

一只青蛙想要過河。 假定河流被等分為 x 個單元格&#xff0c;并且在每一個單元格內都有可能放有一石子&#xff08;也有可能沒有&#xff09;。 青蛙可以跳上石頭&#xff0c;但是不可以跳入水中。 給定石子的位置列表&#xff08;用單元格序號升序表示&#xff09;&#xff…

PaperNotes(8)-Stein Variational Gradient Descent A General Purpose Bayesian Inference Algorithm

通用貝葉斯推理算法-Stein Variational Gradient DescentAbstract1 Introduction2 Background3 Variational Inference Using Smooth Transforms3.1 Stein Operator as the Derivative of KL Divergence定理3.1引理3.23.2 Stein Variational Gradient Descent4 Related Works5 …

thinkphp的增刪改查

ThinkPHP 添加數據 add 方法 ThinkPHP 內置的 add 方法用于向數據表添加數據&#xff0c;相當于 SQL 中的 INSERT INTO 行為。ThinkPHP Insert 添加數據添加數據 add 方法是 CURD&#xff08;Create,Update,Read,Delete / 創建,修改,讀取,刪除&#xff09;中的 Create 的實現&a…

leetcode115 不同的子序列

給定一個字符串 S 和一個字符串 T&#xff0c;計算在 S 的子序列中 T 出現的個數。 一個字符串的一個子序列是指&#xff0c;通過刪除一些&#xff08;也可以不刪除&#xff09;字符且不干擾剩余字符相對位置所組成的新字符串。&#xff08;例如&#xff0c;"ACE" 是…

ThinkPHP 模板循環輸出 Volist 標簽

volist 標簽用于在模板中循環輸出數據集或者多維數組。volist 標簽在模塊操作中&#xff0c;select() 方法返回的是一個二維數組&#xff0c;可以用 volist 直接輸出&#xff1a;<volist name"list" id"vo"> 用 戶 名&#xff1a;{$vo[username]}&l…

MachineLearning(9)-最大似然、最小KL散度、交叉熵損失函數三者的關系

最大似然-最小KL散度-最小化交叉熵損失-三者的關系問題緣起&#xff1a;給定一組數據(x1,x2,...,xm)(x^1,x^2,...,x^m)(x1,x2,...,xm),希望找到這組數據服從的分布。此種情況下&#xff0c;分布規律用概率密度p(x)表征。 問題歸處&#xff1a;如果能夠建模/近似建模p(x)&#…

ThinkPHP redirect 頁面重定向使用詳解與實例

ThinkPHP redirect 方法ThinkPHP redirect 方法可以實現頁面的重定向&#xff08;跳轉&#xff09;功能。redirect 方法語法如下&#xff1a;$this->redirect(string url, array params, int delay, string msg) 參數說明&#xff1a;url 必須&#xff0c;重定向的 URL 表達…

PaperNotes(9)-Learning deep energy model: contrastive divergence vs. Amortized MLE

Learning deep energy model: contrastive divergence vs. Amortized MLEabstract1 Introduction2 Background2.1 stein variational gradient descent2.2 learning energy model**contrastive Divergence**abstract 受SVGD算法的啟發,本文提出兩個算法用于從數據中學習深度能…

windows下的gvim配置

首要任務是下載安裝Gvim7.3 。 安裝完后&#xff0c;gvim菜單中文出現亂碼&#xff0c;在_vimrcset文件中增加&#xff1a; " 配置多語言環境,解決中文亂碼問題 if has("multi_byte") " UTF-8 編碼 set encodingutf-8 set termencodingutf…

leetcode104 二叉樹的最大深度

給定一個二叉樹&#xff0c;找出其最大深度。 二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。 說明: 葉子節點是指沒有子節點的節點。 示例&#xff1a; 給定二叉樹 [3,9,20,null,null,15,7]&#xff0c; 3 / \ 9 20 / \ 15 7 返回它的最大深度…

C++的安全類型轉換的討論

關于強制類型轉換的問題,很多書都討論過,寫的最詳細的是C++ 之父的《C++的設計和演化》。最好的解決方法就是不要使用C風格的強制類型轉換,而是使用標準C++的類型轉換符:static_cast, dynamic_cast。標準C++中有四個類型轉換符:static_cast、dynamic_cast、reinterpret_ca…

PaperNotes(10)-Maximum Entropy Generators for Energy-Based Models

Maximum Entropy Generators for Energy-Based ModelsAbstract1 Introduction2 Background3 Maximum Entropy Generators for Energy-Based Models4 Experiments5 Related Work6 Conclusion7 AcknowledgementsAbstract 由于對數似然梯度的難以計算&#xff0c;能量模型的最大似…

leetcode105 前序中序遍歷序列構造二叉樹

根據一棵樹的前序遍歷與中序遍歷構造二叉樹。 注意: 你可以假設樹中沒有重復的元素。 例如&#xff0c;給出 前序遍歷 preorder [3,9,20,15,7] 中序遍歷 inorder [9,3,15,20,7] 返回如下的二叉樹&#xff1a; 3 / \ 9 20 / \ 15 7 思路&#xff1a; 1、…

c++的虛擬繼承 的一些思考吧

虛擬繼承是多重繼承中特有的概念。虛擬基類是為解決多重繼承而出現的。如:類D繼承自類B1、B2,而類B1、B2都繼承自類A,因此在類D中兩次出現類A中的變量和函數。為了節省內存空間,可以將B1、B2對A的繼承定義為虛擬繼承,而A就成了虛擬基類。實現的代碼如下: class A class …

對于linux socket與epoll配合相關的一些心得記錄

對于linux socket與epoll配合相關的一些心得記錄 沒有多少高深的東西&#xff0c;全當記錄&#xff0c;雖然簡單&#xff0c;但是沒有做過測試還是挺容易讓人糊涂的int nRecvBuf32*1024;//設置為32Ksetsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int))…

leetcode144 二叉樹的前序遍歷

給定一個二叉樹&#xff0c;返回它的 前序 遍歷。 示例: 輸入: [1,null,2,3] 1 \ 2 / 3 輸出: [1,2,3] 進階: 遞歸算法很簡單&#xff0c;你可以通過迭代算法完成嗎&#xff1f; 思路&#xff1a;模仿遞歸的思路壓棧即可。 /*** Definition for a bi…

AJAX大總結

1、AJAX概述 1.1 什么是AJAX AJAX&#xff08;Asynchronous Javascript And XML&#xff09;翻譯成中文就是“異步Javascript和XML”。即使用Javascript語言與服務器進行異步交互&#xff0c;傳輸的數據為XML&#xff08;當然&#xff0c;傳輸的數據不只是XML&#xff09;。 …

我對STL的一些看法(一)初步認識STL

后面一段時間我將會給大家分享我自己學到STL以及應用的時候遇到的問題還有他的一些精髓,可能開始的邏輯會有些亂吧,不過后面還會不斷的整理和優化,讓自己看明白也讓更多的讀者看的清楚。 最近剛閑下來,先說說什么是STL: 不知道你是否有過這樣的經歷。在大學,你準備著手完…

PaperNotes(12)-Autoregressive Quantile networks for generative modeling

Autoregressive Quantile networks for generative modeling3 autoregressive implicit quantiles3 autoregressive implicit quantiles autoregressive&#xff1a;自身做回歸變量&#xff0c;用之前若干時刻的隨機變量 來建模 之后某些時刻 隨機變量的模型。 N維隨機變量的…

我對STL的一些看法(二)認識vector容器

先說vector吧。 C++ Vector(向量容器) 是一個線性順序結構。相當于數組,但其大小可以不預先指定,并且自動擴展。它可以像數組一樣被操作,由于它的特性我們完全可以將vector 看作動態數組。 vector 的數據安排以及操作方式,與 array 非常像似。兩者的唯一差別在于空間的…