ThinkPHP3.2公共類庫、應用類庫ThinkPHP/Library講解

tinywan1227發表於2016-09-12



一、ThinkPHP的類庫主要包括公共類庫和應用類庫,都是基於名稱空間進行定義和擴充套件的。只要按照規範定義,都可以實現自動載入。
        
公共類庫

公共類庫通常是指ThinkPHP/Library目錄下面的類庫,例如:

            Think目錄:系統核心類庫
            Org目錄:第三方公共類庫

        這些目錄下面的類庫都可以自動載入,你只要把相應的類庫放入目錄中,然後新增或者修改名稱空間定義。 你可以在Org/Util/目錄下面新增一個Image.class.php 檔案,然後新增名稱空間如下:

            namespace OrgUtil;
            class Image {
            }

        這樣,就可以用下面的方式直接例項化Image類了:

            $image = new OrgUtilImage;

        除了這些目錄之外,你完全可以在ThinkPHP/Library目錄下面新增自己的類庫目錄,例如,我們新增一個Com目錄用於企業類庫擴充套件:

        ComSinaApp類(位於Com/Sina/App.class.php )

            namespace ComSina;
            class App {
            }

        ComSinaRank類(位於Com/Sina/Rank.class.php)

            namespace ComSina;
            class Rank {
            }

        公共類庫除了在系統的Library目錄之外,還可以自定義其他的名稱空間,我們只需要註冊一個新的名稱空間,在應用或者模組配置檔案中新增下面的設定引數:

            `AUTOLOAD_NAMESPACE` => array(
            `Lib` => APP_PATH.`Lib`,
            )

        我們在應用目錄下面建立了一個Lib目錄用於放置公共的Lib擴充套件,如果我們要把上面兩個類庫放到LibSina目錄下面,只需要調整為:

        LibSinaApp類(位於Lib/Sina/App.class.php )

            namespace LibSina;
            class App {
            }

        LibSinaRank類(位於Lib/Sina/Rank.class.php)

            namespace LibSina;
            class Rank {
            }

        如果你的類庫沒有采用名稱空間的話,需要使用import方法先載入類庫檔案,然後再進行例項化,例如: 我們定義了一個Counter類(位於Com/Sina/Util/Counter.class.php):

            class Counter {
            }

        在使用的時候,需要按下面方式呼叫:

            import(`Com.Sina.Util.Couter`);
            $object = new Counter();

        應用類庫

        應用類庫通常是在應用或者模組目錄下面的類庫,應用類庫的名稱空間一般就是模組的名稱為根名稱空間,例如: HomeModelUserModel類(位於ApplicationHomeModel)

            namespace HomeModel;
            use ThinkModel;
            class UserModel extends Model{
            }

        CommonUtilPay類(位於ApplicationCommonUtil)

            namespace CommonUtil;
            class Pay {
            }

        AdminApiUserApi類(位於ApplicationAdminApi)

            namespace AdminApi;
            use ThinkModel;
            class UserApi extends Model{
            }

            記住一個原則,名稱空間的路徑和實際的檔案路徑對應的話 就可以實現直接例項化的時候自動載入。


相關文章