Laravel框架自动加载类分析

157 阅读1分钟

autoload_real.php

代码分析

autoload_real.php 中的代码
public static function getLoader()
{
    $loader->register(true);// 调用文件 ClassLoader.php 的register 方法
}

ClassLoader.php

public function register($prepend = false) 
{
    // 当实例化一个类的时候,调用 this 类中的 loadClass 方法
    spl_autoload_register(array($this,'loadClass'),true,$perpend);
}

// 重点重点
public function loadClass($class)
{
     // 调用 findFile
    if($file = $this-findFile($class)) {
        includeFile($file);
        return true;
    }
}

public function findFile($class) 
{
    // 做了几件事
    // 1: 先在 classMap属性中找
    // 2: 在 psr4规范中找
    // 3: 在 psr0规范中找
    如果找返回 file文件名
    否则返回 false
}

// 类最后找不到 抛出异常