3 回答

TA貢獻1966條經驗 獲得超4個贊
spl_autoload_register() 允許您注冊PHP將放入堆棧/隊列中的多個函數(或您自己的Autoload類中的靜態方法),并在聲明“新類”時順序調用。
因此,例如:
spl_autoload_register('myAutoloader');
function myAutoloader($className)
{
$path = '/path/to/class/';
include $path.$className.'.php';
}
//-------------------------------------
$myClass = new MyClass();
在上面的示例中,“ MyClass”是您要實例化的類的名稱,PHP將該名稱作為字符串傳遞給spl_autoload_register(),從而允許您選擇變量并將其用于“包含”適當的類/文件。因此,您不需要特別通過include / require語句來包含該類。
就像上面的示例一樣,只需簡單地調用您想要實例化的類,并且由于您已經注冊了spl_autoload_register()自己的函數(通過),該函數可以確定所有類的位置,因此PHP將使用該函數。
使用的好處spl_autoload_register()是,與__autoload()您不同的是,您不需要在創建的每個文件中實現自動加載功能。spl_autoload_register()還可以讓您注冊多個自動加載功能,以加快自動加載速度并使其變得更加容易。
例:
spl_autoload_register('MyAutoloader::ClassLoader');
spl_autoload_register('MyAutoloader::LibraryLoader');
spl_autoload_register('MyAutoloader::HelperLoader');
spl_autoload_register('MyAutoloader::DatabaseLoader');
class MyAutoloader
{
public static function ClassLoader($className)
{
//your loading logic here
}
public static function LibraryLoader($className)
{
//your loading logic here
}
關于spl_autoload,手冊指出:
此功能旨在用作的默認實現__autoload()。如果未指定其他內容且spl_autoload_register()沒有任何參數調用該函數,則此函數將用于以后對的任何調用__autoload()。
實際上,如果所有文件都位于一個目錄中,并且您的應用程序不僅使用.php文件,而且還使用擴展名為.inc的自定義配置文件,那么您可以使用的一種策略是添加包含所有內容的目錄文件到PHP的包含路徑(通過set_include_path())。
而且,由于還需要配置文件,因此將用于spl_autoload_extensions()列出要PHP查找的擴展名。
例:
set_include_path(get_include_path().PATH_SEPARATOR.'path/to/my/directory/');
spl_autoload_extensions('.php, .inc');
spl_autoload_register();
由于spl_autoload是__autoload()magic方法的默認實現,因此當您嘗試實例化新類時,PHP將調用spl_autoload。
希望這可以幫助...

TA貢獻1911條經驗 獲得超7個贊
從PHP 5.3開始,您可以使用spl_autoload_register()名稱空間,這意味著您可以組織項目并自動加載php類,而無需任何要求或包含,也無需重新定義__autoload()函數。
為了演示這種行為,只需創建一個名為index.php的文件:
<?php
spl_autoload_register();
var_dump(new Main\Application);
然后在index.php文件旁邊創建一個名為Main的文件夾。最后,在Main中創建一個名為Application.php的文件,并將以下代碼粘貼到其中:
<?php namespace Main;
class Application{}
- 3 回答
- 0 關注
- 696 瀏覽
添加回答
舉報