ThinkPHP之import方法實(shí)例詳解
import方法是ThinkPHP框架用于類庫導(dǎo)入的封裝實(shí)現(xiàn),尤其對(duì)于項(xiàng)目類庫、擴(kuò)展類庫和第三方類庫的導(dǎo)入支持,import方法早期的版本可以和java的import方法一樣導(dǎo)入目錄和通配符導(dǎo)入,后來考慮到性能問題,在后續(xù)的版本更新中不斷改進(jìn)和簡(jiǎn)化了,所以現(xiàn)在的用法比較簡(jiǎn)單明了。調(diào)用格式:
import('類庫名', '起始路徑', '類庫后綴')
imprt方法有一個(gè)別名vendor方法,專門用于導(dǎo)入第三方類庫,區(qū)別在于起始路徑和類庫后綴默認(rèn)值不同。
我們來分析下具體的用法:
1.導(dǎo)入系統(tǒng)基類庫
系統(tǒng)基類庫其實(shí)就是指的Think類庫包,所在目錄就是指框架的核心Lib目錄,import方法可以用于導(dǎo)入系統(tǒng)基類庫,例如:
import('Think.Util.Array');
表示導(dǎo)入系統(tǒng)目錄下面的Lib/Util/Array.class.php 類庫文件,相當(dāng)于我們這樣使用
require THINK_PATH.'Lib/Util/Array.class.php';
可以支持多級(jí)目錄,例如:
import('Think.Util.U1.ClassA'); import('Think.Util.U1.A2.ClassB');
通過import方法導(dǎo)入類庫后,就可以進(jìn)行類庫的實(shí)例化操作了。
2.導(dǎo)入擴(kuò)展類庫
擴(kuò)展類庫位于Extend/Library目錄下面,這是系統(tǒng)的公共擴(kuò)展類庫目錄,目前支持的擴(kuò)展類庫包只有ORG和Com包。
import('ORG.Util.Image'); import('Com.Sina.OAuth');
會(huì)導(dǎo)入擴(kuò)展目錄下面的第三方類庫(分別是Extend/Library/ORG/Util/Image.class.php和Extend/Library/Com/Sina/OAuth.class.php 類庫文件),第三方類庫包只能支持ORG和Com兩種,下面的子目錄可以隨意添加。
3.導(dǎo)入項(xiàng)目應(yīng)用類庫
如果沒有指定起始導(dǎo)入路徑的話,類庫包Think、ORG、Com之外的都會(huì)被認(rèn)為是導(dǎo)入項(xiàng)目應(yīng)用類庫,例如:
import("MyApp.Action.UserAction"); import("MyApp.Model.InfoModel");
表示導(dǎo)入MyApp項(xiàng)目的UserAction和InfoModel類庫文件,由于通常,我們都是導(dǎo)入當(dāng)前項(xiàng)目下面的類庫,所以可以簡(jiǎn)寫成:
import("@.Action.UserAction"); import("@.Model.InfoModel");
@符號(hào)表示導(dǎo)入當(dāng)前項(xiàng)目下面的類庫,這種方式也一定程度上方便了項(xiàng)目類庫的代碼移植,如果項(xiàng)目名稱改變或者移動(dòng)到其它項(xiàng)目下面的時(shí)候,寫法不需要改變。
4.導(dǎo)入非標(biāo)準(zhǔn)類庫文件
這里所說的非標(biāo)準(zhǔn)類庫文件,主要是指位于特殊位置或者非.class.php后綴的類庫文件。像導(dǎo)入基類庫、擴(kuò)展類庫和項(xiàng)目類庫都是基于框架規(guī)范的目錄下面,如果我們需要導(dǎo)入項(xiàng)目的Common目錄下面的MyClass.php文件,則可以采用:
import('Common.MyClass',APP_PATH,'.php');
或者
import('MyClass',APP_PATH.'Common','.php');
或者要導(dǎo)入當(dāng)前目錄下面的RBAC類庫
import("RBAC.AccessDecisionManager",dirname(__FILE__),".php");
還有一種特殊情況,是類庫命名的特殊性。按照系統(tǒng)的規(guī)則,import方法是無法導(dǎo)入具有點(diǎn)號(hào)的類庫文件的,因?yàn)辄c(diǎn)號(hào)會(huì)直接轉(zhuǎn)化成斜線,例如我們定義了一個(gè)名稱為User.Info.class.php 的文件的話,采用:
import("ORG.User.Info");
方式加載的話就會(huì)出現(xiàn)錯(cuò)誤,導(dǎo)致加載的文件不是ORG/User.Info.class.php 文件,而是ORG/User/Info.class.php 文件,這種情況下,我們可以使用:
import("ORG.User#Info");
來導(dǎo)入。
5.第三方類庫導(dǎo)入
ThinkPHP 的基類庫都是以.class.php 為后綴的,這是系統(tǒng)內(nèi)置的一個(gè)約定,當(dāng)然也可以通過 import 的參數(shù)來控制, 為了更加方便引入其他框架和系統(tǒng)的類庫, 系統(tǒng)還提供了一個(gè)import方法的別名vendor,專門用于導(dǎo)入第三方類庫,并且默認(rèn)的起始目錄和類文件后綴有區(qū)別。第三方類庫位于系統(tǒng)擴(kuò)展目錄下的Vendor 目錄, 例如,我們把 Zend 的 Filter\Dir.php 放到 Vendor 目錄下面,這個(gè)時(shí)候 Dir 文件的路徑就是 Vendor\Zend\Filter\Dir.php,我們使用vendor 方法導(dǎo)入只需要使用:
Vendor('Zend.Filter.Dir');
就可以導(dǎo)入Dir類庫了。
Vendor方法也可以支持和import方法一樣的基礎(chǔ)路徑和文件名后綴參數(shù),例如:
Vendor('Zend.Filter.Dir',dirname(__FILE__),'.class.php');
6.別名導(dǎo)入
除了命名空間的導(dǎo)入方式外,import方法還可以支持別名導(dǎo)入,要使用別名導(dǎo)入,首先要定義別名,我們可以在項(xiàng)目配置目錄下面增加alias.php 用以定義項(xiàng)目中需要用到的類庫別名,例如:
return array( 'rbac' =>LIB_PATH.'Common/Rbac.class.php', 'page' =>LIB_PATH.'Common/Page.class.php', );
那么,現(xiàn)在就可以直接使用:
import("rbac"); import("page");
導(dǎo)入Rbac和Page類,別名導(dǎo)入方式禁止使用import方法的第二和第三個(gè)參數(shù),別名導(dǎo)入方式的效率比命名空間導(dǎo)入方式要高效,缺點(diǎn)是需要預(yù)先定義相關(guān)別名。
可以為某些需要的類庫定義別名,那么無需定義自動(dòng)加載路徑也可以快速的自動(dòng)加載。
一般情況下,由于框架內(nèi)部采用了自動(dòng)加載方式,所以大多數(shù)情況下面不需要用戶手動(dòng)導(dǎo)入類庫文件,通常用于導(dǎo)入擴(kuò)展類庫和第三方類庫的情況居多。而且配合別名定義和自動(dòng)加載路徑的定義,也能減少用戶手動(dòng)導(dǎo)入類庫的情況。
- Thinkphp中import的幾個(gè)用法詳細(xì)介紹
- 解析thinkphp import 文件內(nèi)容變量失效的問題
- thinkphp循環(huán)結(jié)構(gòu)用法實(shí)例
- ThinkPHP中自定義目錄結(jié)構(gòu)的設(shè)置方法
- ThinkPHP模板輸出display用法分析
- ThinkPHP模板之變量輸出、自定義函數(shù)與判斷語句用法
- ThinkPHP模板IF標(biāo)簽用法詳解
- ThinkPHP模板范圍判斷輸出In標(biāo)簽與Range標(biāo)簽用法詳解
- ThinkPHP模板Switch標(biāo)簽用法示例
- Thinkphp中的volist標(biāo)簽用法簡(jiǎn)介
- thinkphp文件引用與分支結(jié)構(gòu)用法實(shí)例
相關(guān)文章
ThinkPHP提示錯(cuò)誤Fatal error: Allowed memory size的解決方法
這篇文章主要介紹了ThinkPHP提示錯(cuò)誤Fatal error: Allowed memory size的解決方法,分析了該錯(cuò)誤的原因與具體的解決方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02php計(jì)算當(dāng)前程序執(zhí)行時(shí)間示例
這篇文章主要介紹了php計(jì)算當(dāng)前程序執(zhí)行時(shí)間示例,需要的朋友可以參考下2014-04-04php中對(duì)內(nèi)置函數(shù)json_encode和json_decode的異常處理
這篇文章主要介紹了php中對(duì)內(nèi)置函數(shù)json_encode和json_decode的異常處理,本篇文章通過定義描述和列舉表格以及最后代碼的展示,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07Laravel 修改驗(yàn)證異常的響應(yīng)格式實(shí)例代碼詳解
這篇文章主要介紹了Laravel 修改驗(yàn)證異常的響應(yīng)格式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05網(wǎng)站被惡意鏡像怎么辦 php一段代碼輕松搞定(全面版)
這篇文章主要介紹了網(wǎng)站被惡意鏡像怎么辦 php一段代碼輕松搞定(全面版),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10