ThinkPHP的類庫包括基類庫和應用類庫
控制器類 模塊名+Action 例如 UserAction、InfoAction
模型類 模型名+Model 例如 UserModel、InfoModel
基類庫是指符合ThinkPHP類庫規范的系統類庫,包括ThinkPHP的核心基類庫和擴展基類庫。核心基類庫目錄位於系統的Lib目錄,核心基類庫也就是Think類庫,擴展基類庫位於Extend/Library目錄,可以擴展ORG 、Com擴展類庫。核心基類庫的作用是完成框架的通用性開發而必須的基礎類和內置支持類等
其中Core下面包括
應用類庫是指項目中自己定義或者使用的類庫,這些類庫也是遵循ThinkPHP的命名規范。應用類庫目錄位於項目目錄下面的Lib目錄。應用類庫的范圍很廣,包括Action類庫、Model類庫或者其他的工具類庫
可以用import加載,也可以自動加載。比如調用數據庫類的時候,就可以直接M('User')或者D('User')。
ThinkPHP類庫的導入區別於其他的框架並沒有采用require或者require_once進行導入,所有類庫導入都采用統一的機制,包含下面兩種方式:
一、Import顯式導入
ThinkPHP模擬了Java的類庫導入機制,統一采用import方法進行類文件的加載。import方法是ThinkPHP內建的類庫導入方法,提供了方便和靈活的文件導入機制,完全可以替代PHP的require和include方法。例如:
import("Think.Util.Session"); import("App.Model.UserModel");
import方法具有緩存和檢測機制,相同的文件不會重復導入,如果導入了不同的位置下面的同名類庫文件,系統也不會再次導入,例如:
import("Think.Util.Array"); import("ORG.Util.Array");
上面的情況導入會產生引入兩個同名的Array.class.php 類,所以系統不會再次導入ORG.Util.Array類。
對於import方法,系統會自動識別導入類庫文件的位置,ThinkPHP的約定是Think、ORG、Com包的導入作為基類庫導入,否則就認為是項目應用類庫導入。
import("Think.Util.Session"); import("ORG.Util.Page");
上面兩個方法分別導入了Think基類庫的Util/Session.class.php文件和ORG擴展類庫包的Util/Page.class.php文件。
要導入項目的應用類庫文件也很簡單,使用下面的方式就可以了,和導入基類庫的方式看起來差不多:
import("MyApp.Action.UserAction"); import("MyApp.Model.InfoModel");
上面的方式分別表示導入MyApp項目下面的Lib/Action/UserAction.class.php和Lib/Model/InfoModel.class.php類文件。通常我們都是在當前項目里面導入所需的類庫文件,所以,我們可以使用下面的方式來簡化代碼
import("@.Action.UserAction"); import("@.Model.InfoModel");
我們知道,按照系統的規則,import方法是無法導入具有點號的類庫文件的,因為點號會直接轉化成斜線,例如我們定義了一個名稱為User.Info.class.php 的文件的話,采用:
import("ORG.User.Info");
方式加載的話就會出現錯誤,導致加載的文件不是ORG/User.Info.class.php 文件,而是ORG/User/Info.class.php 文件(最后一個點后面的值為類名),這種情況下,我們可以使用:
import("ORG.User#Info");
自動加載
在大多數情況下,我們無需手動導入類庫,而是通過配置采用自動加載機制即可,自動加載機制是真正的按需加載,可以很大程度的提高性能。
系統會首先按照內置的規則來判斷加載,系統規則僅針對行為類、模型類和控制器類,搜索規則如下: