31

拥有多个的好处是什么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();
4

2 回答 2

23

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

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

此外,PHP 手册指出...

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

于 2011-11-20T02:17:01.873 回答
0

我想不需要添加多个,但这是你的逻辑。spl_autoload_register 的工作方式很棒。假设一个有 3rd 方目录,通常通过命名空间进行管理,命名空间也代表他们的路径。将这个简单的类视为自动加载器类

 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条件或任何需要做的事情来修复路径。

于 2016-05-25T07:00:04.723 回答