多个spl_autoload_register

2022-08-30 14:38:09

什么是/是拥有多个的好处spl_autoload_register

例:

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

与:

使用一个

spl_autoload_register('autoload');__autoload();

然后在函数内执行逻辑。

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

答案 1

如果你有一个__autoload(),并且你包括一个第三方库,它也有一个,它将被破坏。

使用spl_autoload_register()注册多个自动加载可确保您可以将代码与现有代码(思考库等)一起放入,而不会破坏或隐藏现有/未来的自动加载。

此外,PHP手册指出...

spl_autoload_register()为自动加载类提供了更灵活的替代方法。因此,不鼓励使用,将来可能会被弃用或删除。__autoload()


答案 2

我想没有必要添加多个,但这是你的逻辑。spl_autoload_register的工作方式非常棒。假设一个人有第三方目录,并且通常通过命名空间进行管理,该命名空间也表示它们的路径。将此简单类视为自动加载程序类

 class MyAutoLoader {

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

     function load( $class )
     {
         $filepath = 'classes/'.$class.'.php';
         require_once( $filepath);
     }
 }

然后在索引文件中包含此加载程序文件并创建此类的实例:

$autoload = new MyAutoLoader();

现在,您可以直接创建类的实例。假设我们在目录中有'Person'类,并且相同的路径是该类的命名空间classes\QMS\SERVICES\Person.php

$person = new QMS\SERVICES\Person();

现在,当您使用new时,它将检查该类是否存在,并且作为字符串的值将被传递给类“MyAutoLoader”的“加载”函数。在那里,它将被包括在内。或者,您可以更改函数“load”来修复类文件的路径,将 if 条件或任何需要 b 执行的操作来修复路径。


推荐