首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个spl_autoload_register

多个spl_autoload_register
EN

Stack Overflow用户
提问于 2011-11-20 10:05:57
回答 2查看 8.2K关注 0票数 31

拥有多个spl_autoload_register的好处是什么

示例:

代码语言:javascript
复制
spl_autoload_register('autoload_systems');
spl_autoload_register('autoload_thirdparties');
spl_autoload_register('autoload_services');

vs:

使用一个

spl_autoload_register('autoload');__autoload();

然后在函数内部执行逻辑。

代码语言:javascript
复制
eg:
$ftp = new systems_ftp();
$services = new services_cron_email();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-20 10:17:02

如果你有一个__autoload(),并且你包含了一个第三方库,这个库也有一个,那么它将会被重创。

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

另外,PHP manual states...

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

票数 22
EN

Stack Overflow用户

发布于 2016-05-25 15:00:05

我想不需要添加多个,但这是在你的逻辑上。spl_autoload_register的工作方式非常棒。假设有第三方目录,通常是通过命名空间来管理的,命名空间也代表了它们的路径。将这个简单的类看作autoloader类

代码语言:javascript
复制
 class MyAutoLoader {

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

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

然后在索引文件中包含这个加载器文件,并创建这个类的实例:

代码语言:javascript
复制
$autoload = new MyAutoLoader();

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

代码语言:javascript
复制
$person = new QMS\SERVICES\Person();

现在,当你使用new时,它会检查这个类是否存在,并将字符串形式的值传递给'MyAutoLoader‘类的'load’函数。在那里,它将被包括在内。或者你可以改变'load‘函数来修复你的类文件的路径,放入你的if条件或者任何需要修复路径的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8198922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档