ClassLoader是用於自動加載類的PHP庫。類自動加載意味著僅在實際需要時加載類,而不必在每個執行中包括每個類文件。這減少了頁面上的加載開銷,尤其是在較大的網站上,因為只需要加載一些類文件。通常,這些類也會根據文件名和基於名稱名稱的文件名進行動態加載。這也使管理大量的類文件更容易。
該庫支持當前自動加載類的兩個標準,即PSR-0和PSR-4。這些標準背後的基本思想是,類文件基於其名稱空間和以類命名的文件位於目錄中。這兩個標準之間的關鍵區別在於,PSR-4不需要目錄層次結構中存在整個命名空間。
但是,由於查找實際類文件的操作往往相對昂貴,因此該庫還提供了基本的緩存機制,允許在PHP文件中緩存類文件位置。通過緩存,手動加載和加載文件之間的性能差異可以忽略不計。
可以使用Apigen生成的API文檔可以在線閱讀:http://kit.riimu.net/api/classloader/
安裝此庫的最簡單方法是使用作曲家來處理您的依賴項。為了通過作曲家安裝此庫,只需按照以下兩個步驟操作:
通過在項目root中運行作曲家命令行安裝來獲取composer.phar 。
運行安裝腳本後,您應該在項目root中有composer.phar文件,並且可以運行以下命令:
php composer.phar require "riimu/kit-classloader:^4.4"
通過作曲家安裝此庫後,您可以通過包括由作曲家在安裝過程中生成的vendor/autoload.php文件加載庫。
如果您已經熟悉如何使用Composer,則可以通過將以下composer.json文件添加到項目中並運行composer install命令來添加庫作為依賴項:
{
"require" : {
"riimu/kit-classloader" : " ^4.4 "
}
}如果您不希望使用作曲家加載庫,則可以通過下載最新版本並將src文件夾提取到您的項目中來手動下載庫。然後,您可以包括提供的src/autoload.php文件以加載庫類。
ClassLoader分別支持由PSR-0和PSR-4標准通過方法addBasePath()和addPrefixPath()定義的自動加載。您無需了解這些標準即可使用此庫,只需使用最適合您的方法即可。
PSR-0類自動加載定義的類文件必須放置在反映其名稱空間的目錄樹中。例如,“ foo bar baz”類可以位於文件中'/path/path/to/classes/foo/bar/bar/baz.php'。此方法通常是放置類文件的最簡單方法。
使用addBasePath()方法,您可以定義在哪裡尋找類的基本目錄。要加載上面提到的類,您可以使用以下代碼:
<?php
require ' vendor/autoload.php ' ;
$ loader = new Riimu Kit ClassLoader ClassLoader ();
$ loader -> addBasePath ( ' /path/to/classes/ ' );
$ loader -> register ();
$ obj = new Foo Bar Baz ();如果特定目錄僅適用於特定名稱空間,則可以使用第二個參數來定義名稱空間。但是,目錄仍需要指向命名空間的基本目錄。例如:
<?php
require ' vendor/autoload.php ' ;
$ loader = new Riimu Kit ClassLoader ClassLoader ();
$ loader -> addBasePath ( ' /path/to/classes/ ' , ' FooBar ' );
$ loader -> register ();
$ obj = new Foo Bar Baz ();請注意,PSR-0還指出,班級名稱中的強調被視為名稱空間分離器(但在名稱空間中不強調)。因此,即使您的班級被稱為“ foo bar_baz”,以上兩個示例仍然可以使用。即使使用類名中的下劃線定義了類名稱空間,您也需要在命名空間參數中使用反斜杠。
與PSR-0不同,PSR-4類自動加載標準不需要將類放置在反映其整個命名空間的目錄樹中。取而代之的是,可以用特定路徑代替一部分名稱空間。
例如,如果您的類“ foo bar baz”位於文件'/path/path/path/to/library/baz.php'中,則可以使用addPrefixPath()註冊路徑並指定名稱空間,如以下示例所示:
<?php
require ' vendor/autoload.php ' ;
$ loader = new Riimu Kit ClassLoader ClassLoader ();
$ loader -> addPrefixPath ( ' /path/to/Library/ ' , ' FooBar ' );
$ loader -> register ();
$ obj = new Foo Bar Baz ();這允許大量較短的目錄結構,因為整個命名空間無需在目錄樹中反映。還可以省略命名空間參數,在這種情況下,路徑的工作原理與通過addBasePath()添加的路徑相同,只是這樣的事實,即不能將其視為名稱空間分隔符的事實。
雖然您只需多次調用路徑添加方法,但可以使用數組添加多個路徑。這通常會使配置變得容易得多。例如,您可以通過提供一個數組來添加多個基本路徑:
<?php
require ' vendor/autoload.php ' ;
$ loader = new Riimu Kit ClassLoader ClassLoader ();
$ loader -> addPrefixPath ([
' /path/to/classes/ ' ,
' /other/path/ ' ,
]);
$ loader -> register ();或者,您可以通過提供使用數組鍵來定義名稱空間的關聯數組來添加命名空間特定路徑:
<?php
require ' vendor/autoload.php ' ;
$ loader = new Riimu Kit ClassLoader ClassLoader ();
$ loader -> addPrefixPath ([
' FooBar ' => ' /path/to/classes/ ' ,
' OtherNamesapace ' => [ ' /other/path/ ' , ' /some/other ' ],
]);
$ loader -> register ();如上示例所示,您還可以提供特定名稱空間的路徑列表。
在每個請求中尋找文件系統中的類是一件昂貴的事情。強烈建議緩存文件位置,以便無需在每個請求上搜索它們。畢竟,類文件不會在文件系統中移動。
該庫通過FileCacheClassLoader提供了一個非常簡單的緩存系統。該類將文件位置存儲在單個PHP文件中,該文件在每個請求上加載,而不是手動搜索文件。
FileCacheClassLoader的使用與使用ClassLoader並沒有太大差異。您只需要在構造函數中提供可寫的高速緩存文件的路徑即可。該文件將用於存儲類位置,並在發現新的類文件時會重寫。例如:
<?php
require ' vendor/autoload.php ' ;
$ loader = new Riimu Kit ClassLoader FileCacheClassLoader ( __DIR__ . ' /cache.php ' );
$ loader -> addBasePath ( ' /path/to/classes/ ' );
$ loader -> register ();該圖書館是版權(C)2012-2017 RiikkaKalliomäki。
有關許可證和復制信息,請參見許可證。