为什么要使用spl_autoload_unregister

请问:

最近学习 laravel 源码,发现他的 autoload_real.php 里面有一段:

        spl_autoload_register(array('ComposerAutoloaderInit290bf49d84893e46e6f7e0573b89e863', 'loadClassLoader'), true, true);
        
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
      
        spl_autoload_unregister(array('ComposerAutoloaderInit290bf49d84893e46e6f7e0573b89e863', 'loadClassLoader'));

为什么要使用spl_autoload_unregister? 这里面有什么特别的原因么?

//spl_autoload_unregister:

//从spl提供的自动装载函数栈中注销某一函数。如果该函数栈处于激活状态,并且在给定函数注销后该栈变为空,则该函数栈将会变为无效。
//如果该函数注销后使得自动装载函数栈无效,即使存在有__autoload函数它也不会自动激活。
参数
 
//要注销的自动装载函数。
//返回值
//如果成功则返回 TRUE,失败则返回 FALSE。
if ($enabled === true) {
         spl_autoload_register(array($class, 'autoload'));
       } else {
         spl_autoload_unregister(array($class, 'autoload'));
       }

谢谢。

阅读 5.7k
2 个回答

首先用spl_autoload_register注册了loadClassLoader,目的在于实现ComposerAutoloadClassLoader的自动加载,在self::$loader = $loader = new ComposerAutoloadClassLoader();执行完毕,ClassLoader加载完成之后,loadClassLoader就没必要存在了,spl_autoload_unregister卸载

ClassLoader类加载完成并赋予$loader之后,loadClassLoader已经加载完毕,需要注销

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题