为了账号安全,请及时绑定邮箱和手机立即绑定

spl_autoload_register自动加载函数的参数问题。

spl_autoload_register自动加载函数的参数问题。

PHP
胡子哥哥 2019-03-18 16:53:53
源码如下: class ComposerAutoloaderInit { private static $loader; public static function loadClassLoader($class) { if ('Composer\Autoload\ClassLoader' === $class) { require __DIR__ . '/ClassLoader.php';//注意这一行。 } } public static function getLoader() { if (null !== self::$loader) { return self::$loader; } spl_autoload_register(array('ComposerAutoloaderInit', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); . . //省略很多代码 . . 在我调用 ComposerAutoloaderInit::getLoader() 方法的时候,发现 loadClassLoader 中的 if 执行了(有注释的那行)。但是 if 有条件判断 'ComposerAutoloadClassLoader' === $class ,而 spl_autoload_register 注册的时候似乎没有传递 $class 进去。请 $class 是如何定义的?
查看完整描述

3 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

首先要明确通过 spl_autoload_register 注册的,不是类,也不是类所对应的文件,而是自动加载方法。
那么 spl_autoload_register 的参数就很明确,是需要一个自动加载的方法的。
这个方法,就是代码里的 array('ComposerAutoloaderInit', 'loadClassLoader') 。
而真正需要加载类的时候,PHP 会调用这个方法,即 ComposerAutoloaderInit::loadClassLoader ,带上类名。

理解这个过程的关键,是分清楚注册和调用是两个流程,而这里,调用者并不是你的代码,而是 PHP 本身,所以你自然就看不到如何传入类名的了。

查看完整回答
反对 回复 2019-03-18
  • 3 回答
  • 0 关注
  • 470 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信