讀古今文學網 > 微信公眾平台開發:從零基礎到ThinkPHP5高性能框架實踐 > 25.1.3 常用概念 >

25.1.3 常用概念

使用ThinkPHP時,需要對以下概念有比較深的認識。

1.MVC

ThinkPHP 5應用基於MVC(模型-視圖-控制器)的方式來組織。MVC是一個設計模式,它強制性地使應用程序的輸入、處理和輸出分開。使用MVC的應用程序被分為3個核心部件:模型(M)、視圖(V)、控制器(C),它們各自處理自己的任務。

2.入口文件

用戶請求的PHP文件,負責處理一個請求的生命週期,最常見的入口文件就是index.php,有時會為了某些特殊的需求而增加新的入口文件。例如,給後台模塊單獨設置的一個入口文件admin.php或者一個控制器程序入口think都屬於入口文件。

3.應用

應用在ThinkPHP中是一個管理系統架構及生命週期的對象,由系統的\think\App類完成。應用通常在入口文件中被調用和執行,具有相同的應用目錄(APP_PATH)的應用被認為是同一個應用,但一個應用可能存在多個入口文件。

應用具有自己獨立的配置文件、公共(函數)文件。

4.模塊

一個典型的應用是由多個模塊組成的,這些模塊通常都是應用目錄下的一個子目錄,每個模塊都有自己獨立的配置文件、公共文件和類庫文件。ThinkPHP 5支持單一模塊架構設計,如果你的應用下只有一個模塊,那麼這個模塊的子目錄可以省略。

5.控制器

每個模塊擁有獨立的MVC類庫及配置文件,一個模塊下有多個控制器負責響應請求,而每個控制器其實就是一個獨立的控制器類。控制器主要負責請求的接收,並調用相關的模型處理,並最終通過視圖輸出。嚴格來說,控制器不應該過多地介入業務邏輯處理。

一個典型的Index控制器類如下。


namespace app\index\controller;

class Index 
{
    public function index
    {
        return 'index';
    }

    public function hello($name)
    {
        return 'Hello,'.$name;
    }
}
  

6.操作

一個控制器包含多個操作(方法),操作方法是一個URL訪問的最小單元。操作方法可以不使用任何參數,如果定義了一個非可選參數,則該參數必須通過用戶請求傳入。如果是URL請求,則通常使用$_GET或者$_POST方式傳入。

上述Index控制器類包含兩個操作方法:index和hello。

7.模型

模型類通常完成實際的業務邏輯和數據封裝,並返回和格式無關的數據。模型類並不一定要訪問數據庫,而且在ThinkPHP 5的架構設計中,只有進行實際的數據庫查詢操作時,才會進行數據庫的連接,是真正的惰性連接。

ThinkPHP的模型層支持多層設計,因此可以對模型層進行更細化的設計和分工。例如,把模型層分為邏輯層、服務層、事件層等。

8.視圖

控制器調用模型類後返回的數據通過視圖組裝成不同格式輸出。視圖根據不同的需求,決定調用模板引擎進行內容解析後輸出還是直接輸出。視圖通常會有一系列的模板文件對應不同的控制器和操作方法,並且支持動態設置模板目錄。

9.驅動

系統很多的組件都採用驅動式設計,從而可以更靈活的擴展,驅動類的位置默認是放入核心類庫目錄下,也可以重新定義驅動類庫的命名空間,從而改變驅動的文件位置。

10.行為

行為(Behavior)是在預先定義好的一個應用位置執行的一些操作。它類似於AOP編程中的「切面」概念,給某一個切面綁定相關行為就成了一種類AOP編程的思想。所以,行為通常是和某個位置相關,行為的執行時間依賴於綁定到了哪個位置上。

要執行行為,首先要在應用程序中進行行為偵聽。


// 在app_init位置偵聽行為
\think\Hook::listen('app_init');
  

然後對某個位置進行行為綁定。


// 綁定行為到app_init位置
\think\Hook::add('app_init','\app\index\behavior\Test');
  

一個位置上如果綁定了多個行為,則按照綁定的順序依次執行,除非遇到中斷。

11.命名空間

ThinkPHP 5採用PHP的命名空間進行類庫文件的設計和規劃,並且符合PSR-4的自動加載規範。