3 回答

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

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