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

源码如下:

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 是如何定义的?

胡子哥哥
浏览 471回答 3
3回答

开心每一天1111

首先要明确通过 spl_autoload_register 注册的,不是类,也不是类所对应的文件,而是自动加载方法。那么 spl_autoload_register 的参数就很明确,是需要一个自动加载的方法的。这个方法,就是代码里的 array('ComposerAutoloaderInit', 'loadClassLoader') 。而真正需要加载类的时候,PHP 会调用这个方法,即 ComposerAutoloaderInit::loadClassLoader ,带上类名。 理解这个过程的关键,是分清楚注册和调用是两个流程,而这里,调用者并不是你的代码,而是 PHP 本身,所以你自然就看不到如何传入类名的了。
打开App,查看更多内容
随时随地看视频慕课网APP