Laravel自動加載類教程

八月六日的時候寫過一次關於Laravel源碼的文章,其實要讀懂一個項目的代碼,必須事先了解它的自動加載機制,這裏就接上篇文章說一下Laravel的自動加載。

Laravel中所有關於自動加載的部分都在laravel/autoloader.php文件中,從它聲明的數組裏我們就可以知道Laravel爲我們提供的自動加載類型:

public static $mappings = array(); 
public static $directories = array(); 
public static $namespaces = array(); 
public static $underscored = array(); 
public static $aliases = array();

我們可以加載單個文件($mappings)、一個目錄($directories)、一個命名空間(namespace)。其中的$aliases數據則保存的是類的別名,在application/config/application.php中可以找到application插件包類別名的數組。而underscored則是爲了對PHP5.3以下版本的兼容,是命名空間的替代方法。

public static function load($class) { 
    if (isset(static::$aliases[$class])){ 
        return class_alias(static::$aliases[$class], $class);
    } elseif (isset(static::$mappings[$class])){ 
        require static::$mappings[$class]; return;
    } foreach (static::$namespaces as $namespace => $directory){ 
        if (starts_with($class, $namespace)){ 
            return static::load_namespaced($class, $namespace, $directory);
        }
    } 
    static::load_psr($class);
}


查看Autoloader的load方法可以知道Laravel自動加載的判斷規則。當加載一個類的時候,最先檢查的是類別名,如果在別名數組中存在要加載的類,則直接聲明一個別名。再檢查文件數組,然後纔是需要迭代才能判斷的命名空間,最後是目錄加載。

對於Laravel自動加載的使用方法可以參考官方文檔寫得很明白,如果想要進一步瞭解一些自動加載類的編寫標準,可以閱讀一下PSR-0 Autoloading Standard

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章