ThinkPHP之import方法執行個體詳解_PHP教程

來源:互聯網
上載者:User
import方法是ThinkPHP架構用於類庫匯入的封裝實現,尤其對於項目類庫、擴充類庫和第三方類庫的匯入支援,import方法早期的版本可以和java的import方法一樣匯入目錄和萬用字元匯入,後來考慮到效能問題,在後續的版本更新中不斷改進和簡化了,所以現在的用法比較簡單明了。調用格式:

import('類庫名', '起始路徑', '類庫尾碼')

imprt方法有一個別名vendor方法,專門用於匯入第三方類庫,區別在於起始路徑和類庫尾碼預設值不同。

我們來分析下具體的用法:

1.匯入系統基底類別庫

系統基底類別庫其實就是指的Think類庫包,所在目錄就是指架構的核心Lib目錄,import方法可以用於匯入系統基底類別庫,例如:

import('Think.Util.Array');

表示匯入系統目錄下面的Lib/Util/Array.class.php 類庫檔案,相當於我們這樣使用

require THINK_PATH.'Lib/Util/Array.class.php';

可以支援多級目錄,例如:

import('Think.Util.U1.ClassA');import('Think.Util.U1.A2.ClassB');

通過import方法匯入類庫後,就可以進行類庫的執行個體化操作了。

2.匯入擴充類庫

擴充類庫位於Extend/Library目錄下面,這是系統的公用擴充類庫目錄,目前支援的擴充類庫包只有ORG和Com包。

import('ORG.Util.Image');import('Com.Sina.OAuth');

會匯入擴充目錄下面的第三方類庫(分別是Extend/Library/ORG/Util/Image.class.php和Extend/Library/Com/Sina/OAuth.class.php 類庫檔案),第三方類庫包只能支援ORG和Com兩種,下面的子目錄可以隨意添加。

3.匯入項目應用類庫

如果沒有指定起始匯入路徑的話,類庫包Think、ORG、Com之外的都會被認為是匯入項目應用類庫,例如:

import("MyApp.Action.UserAction");import("MyApp.Model.InfoModel");

表示匯入MyApp項目的UserAction和InfoModel類庫檔案,由於通常,我們都是匯入當前項目下面的類庫,所以可以簡寫成:

import("@.Action.UserAction");import("@.Model.InfoModel");

@符號表示匯入當前項目下面的類庫,這種方式也一定程度上方便了項目類庫的代碼移植,如果項目名稱改變或者移動到其它項目下面的時候,寫法不需要改變。

4.匯入非標準類庫檔案

這裡所說的非標準類庫檔案,主要是指位於特殊位置或者非.class.php尾碼的類庫檔案。像匯入基底類別庫、擴充類庫和項目類庫都是基於架構規範的目錄下面,如果我們需要匯入項目的Common目錄下面的MyClass.php檔案,則可以採用:

import('Common.MyClass',APP_PATH,'.php');

或者

import('MyClass',APP_PATH.'Common','.php');

或者要匯入目前的目錄下面的RBAC類庫

import("RBAC.AccessDecisionManager",dirname(__FILE__),".php");

還有一種特殊情況,是類庫命名的特殊性。按照系統的規則,import方法是無法匯入具有點號的類庫檔案的,因為點號會直接轉化成斜線,例如我們定義了一個名稱為User.Info.class.php 的檔案的話,採用:

import("ORG.User.Info");

方式載入的話就會出現錯誤,導致載入的檔案不是ORG/User.Info.class.php 檔案,而是ORG/User/Info.class.php 檔案,這種情況下,我們可以使用:

import("ORG.User#Info");

來匯入。

5.第三方類庫匯入

ThinkPHP 的基底類別庫都是以.class.php 為尾碼的,這是系統內建的一個約定,當然也可以通過 import 的參數來控制, 為了更加方便引入其他架構和系統的類庫, 系統還提供了一個import方法的別名vendor,專門用於匯入第三方類庫,並且預設的起始目錄和類檔案尾碼有區別。第三方類庫位於系統擴充目錄下的Vendor 目錄, 例如,我們把 Zend 的 Filter\Dir.php 放到 Vendor 目錄下面,這個時候 Dir 檔案的路徑就是 Vendor\Zend\Filter\Dir.php,我們使用vendor 方法匯入只需要使用:

Vendor('Zend.Filter.Dir');

就可以匯入Dir類庫了。
Vendor方法也可以支援和import方法一樣的基礎路徑和檔案名稱尾碼參數,例如:

Vendor('Zend.Filter.Dir',dirname(__FILE__),'.class.php');

6.別名匯入

除了命名空間的匯入方式外,import方法還可以支援別名匯入,要使用別名匯入,首先要定義別名,我們可以在項目配置目錄下面增加alias.php 用以定義項目中需要用到的類庫別名,例如:

return array(  'rbac' =>LIB_PATH.'Common/Rbac.class.php',  'page' =>LIB_PATH.'Common/Page.class.php', );

那麼,現在就可以直接使用:

import("rbac");import("page");

匯入Rbac和Page類,別名匯入方式禁止使用import方法的第二和第三個參數,別名匯入方式的效率比命名空間匯入方式要高效,缺點是需要預先定義相關別名。
可以為某些需要的類庫定義別名,那麼無需定義自動載入路徑也可以快速的自動載入。

一般情況下,由於架構內部採用了自動載入方式,所以大多數情況下面不需要使用者手動匯入類庫檔案,通常用於匯入擴充類庫和第三方類庫的情況居多。而且配合別名定義和自動載入路徑的定義,也能減少使用者手動匯入類庫的情況。

http://www.bkjia.com/PHPjc/825503.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/825503.htmlTechArticleimport方法是ThinkPHP架構用於類庫匯入的封裝實現,尤其對於項目類庫、擴充類庫和第三方類庫的匯入支援,import方法早期的版本可以和java的...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.