thinkphp中的類庫與引用import引入機制

ThinkPHP的類庫包括基類庫和應用類庫php

控制器類 模塊名+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進行導入,全部類庫導入都採用統一的機制,包含下面兩種方式:性能

1、Import顯式導入

ThinkPHP模擬了Java的類庫導入機制,統一採用import方法進行類文件的加載。import方法是ThinkPHP內建的類庫導入方法,提供了方便和靈活的文件導入機制,徹底能夠替代PHP的require和include方法。例如:ui

import("Think.Util.Session");
import("App.Model.UserModel");

import方法具備緩存和檢測機制,相同的文件不會重複導入,若是導入了不一樣的位置下面的同名類庫文件,系統也不會再次導入,例如:spa

import("Think.Util.Array");
import("ORG.Util.Array");

上面的狀況導入會產生引入兩個同名的Array.class.php 類,因此係統不會再次導入ORG.Util.Array類。3d

對於import方法,系統會自動識別導入類庫文件的位置,ThinkPHP的約定是Think、ORG、Com包的導入做爲基類庫導入,不然就認爲是項目應用類庫導入。code

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");

自動加載

在大多數狀況下,咱們無需手動導入類庫,而是經過配置採用自動加載機制便可,自動加載機制是真正的按需加載,能夠很大程度的提升性能。

系統會首先按照內置的規則來判斷加載,系統規則僅針對行爲類、模型類和控制器類,搜索規則以下:

相關文章
相關標籤/搜索