2011-11-20 28 views
30

什么是/是具有多个的利益(多个)spl_autoload_register多个spl_autoload_register

例如:

spl_autoload_register('autoload_systems'); 
spl_autoload_register('autoload_thirdparties'); 
spl_autoload_register('autoload_services'); 

VS:使用一个

spl_autoload_register('autoload');__autoload();

然后做逻辑我在功能上。

eg: 
$ftp = new systems_ftp(); 
$services = new services_cron_email(); 

回答

21

如果你有一个__autoload(),你包括第三方库,它也有一个,它会被打一顿。

使用spl_autoload_register()注册多个自动加载确保您可以使用现有代码(思考库等)将代码放入,而不会对现有/未来自动加载进行破坏或遮蔽。

此外,PHP manual states ...

spl_autoload_register()提供 自动加载类更灵活的选择。出于这个原因,使用__autoload()是 不鼓励,并可能在将来被弃用或删除。

+0

但有多个spl_autoload_register比较慢,那么只用一个? –

+2

@GinoSullivan也许,但我很难用它作为编写使用'__autoload()'的代码的借口。 – alex

+0

感谢您的信息 –

-1

我想没有必要添加多个,但其对你的逻辑。 spl_autoload_register的工作方式非常棒。 suppone一个人有第三方直接,这是通过命名空间,也代表他们的路径Ussually管理。 考虑这个简单的类的自动加载类

类MyAutoLoader {

public function __construct() 
{ 
    spl_autoload_register(array($this, 'load')); 
} 




function load($class) 
{ 

    $filepath = 'classes/'.$class.'.php'; 
    require_once($filepath); 

} 

}

然后索引文件中包含该加载程序文件和这个类的创建实例

$autoload = new MyAutoLoader(); 

现在你可以直接创建ins类tances 假设我们有“人”类目录“类别\ QMS \ SERVICES \ Person.php”和相同的路径是类的命名空间

$ =人新QMS \ SERVICES \人() ;

现在

时,当您将使用新的,如果这个类存在和价值作为字符串将传递到类的“负荷”功能,它会检查“MyAutoLoader”。在那里它会包括在内。或者你可以改变函数'加载'来修复你的类文件的路径,如果条件或任何需要修复的路径需要修改。