// 引入自動加載器
require __DIR__.'/../bootstrap/autoload.php';
// 聲明啟動時間常量
define('LARAVEL_START', microtime(true));
// 引入自動加載器
require __DIR__.'/../vendor/autoload.php';
require_once __DIR__ . '/composer/autoload_real.php';
// 返回類的加載器
return ComposerAutoloaderInit9113d3930353009330b3153b2902b9cb::getLoader();
// 訪問getLoader靜態(tài)方法
// 判斷是否已存在加載器,如存在則自動返回
if (null !== self::$loader) {
return self::$loader;
}
// 注冊類的自動加載器
// 第一個參數(shù)是callable,指明類和方法
// 第二個參數(shù)是說如果參數(shù)1出問題了是否拋出異常,默認 true
// 第三個參數(shù)是說是否將該函數(shù)加入列隊之首,默認 false
// 因為該函數(shù)可以多次使用,那么當類找不到引入時來調用該函數(shù)注冊的方法
// 到時候哪個方法誰對這次意外進行處理呢,所以有了參數(shù)三
spl_autoload_register(array('ComposerAutoloaderInit9113d3930353009330b3153b2902b9cb', 'loadClassLoader'), true, true);
// loadClassLoader 函數(shù)
// 該函數(shù)的 $class 參數(shù) 是當前未經(jīng) include 或 require 的類名
public static function loadClassLoader($class){
if ('Composer\Autoload\ClassLoader' === $class) {
require __DIR__ . '/ClassLoader.php';
}
}
// 實例化加載器
// 實例化\Composer\Autoload\ClassLoader對象,并將結果保存到靜態(tài)變量 $loader 和 局部變量 $loader
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
// 由于\Composer\Autoload\ClassLoader未經(jīng)引用
// 所以會調用loadClassLoader,并引入當前文件夾下的ClassLoader.php 文件
// 注銷剛剛注冊的加載器
spl_autoload_unregister(array('ComposerAutoloaderInit9113d3930353009330b3153b2902b9cb', 'loadClassLoader'));
// PHP_VERSION_ID:獲取當前PHP的版本ID
// 當輸入 php -v時顯示PHP 7.1.6,PHP_VERSION_ID 等于 70106
// 是否定義常量HHVM_VERSION 和 zend 相關函數(shù)
// 得到結果來判斷是否使用靜態(tài)加載器
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
// 當 $useStaticLoader 為 真時,選擇靜態(tài)加載器。
// 我當前環(huán)境是Win10、PHP7.1.6 nts、apache2.4
// 結果 $useStaticLoader 為 true
// 引入靜態(tài)加載器
require_once __DIR__ . '/autoload_static.php';
// 加載靜態(tài)加載器中的資源
// 靜態(tài)加載器中包含了多個鍵值數(shù)組,如類庫映射表
// 其getInitializer函數(shù)接受一個ClassLoader
// 也就是上面已經(jīng)實例化的$loader對象
// 在函數(shù)中返回一個匿名函數(shù),函數(shù)中將靜態(tài)加載器中聲明的數(shù)組賦值給 $loader 對象
call_user_func(\Composer\Autoload\ComposerStaticInit9113d3930353009330b3153b2902b9cb::getInitializer($loader));
// 正式注冊加載器
$loader->register(true);
// register()函數(shù)在 ClassLoader.php 文件中
// 該函數(shù)執(zhí)行 類的加載器 注冊行為
// 并將該行為綁定到當前類的 loadClass 方法
// 同時將該注冊器的順序放到列隊的首位
public function register($prepend = false)
{
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
}
// loadClass 方法中 調用 當前類的 findFile 方法來查找文件
// findFile 方法中 調用了 findFileWithExtension 函數(shù)
// 該函數(shù)有對根據(jù)類名和后綴查找文件路徑的具體實現(xiàn)
// 存在則引入并返回 true,反之則不管
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
includeFile($file);
return true;
}
}
// 回到 ComposerAutoloaderInit9113d3930353009330b3153b2902b9cb 類
// 注冊好 類的自動加載器 后
// 判斷如果是靜態(tài)加載方式,那么獲取靜態(tài)加載類中的 `$file` 數(shù)組
public static $files = array (
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
'667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php',
'1d1b89d124cc9cb8219922c9d5569199' => __DIR__ . '/..' . '/hamcrest/hamcrest-php/hamcrest/Hamcrest.php',
'2c102faa651ef8ea5874edb585946bce' => __DIR__ . '/..' . '/swiftmailer/swiftmailer/lib/swift_required.php',
'5255c38a0faeba867671b61dfda6d864' => __DIR__ . '/..' . '/paragonie/random_compat/lib/random.php',
'e7223560d890eab89cda23685e711e2c' => __DIR__ . '/..' . '/psy/psysh/src/Psy/functions.php',
'f0906e6318348a765ffb6eb24e0d0938' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/helpers.php',
'58571171fd5812e6e447dce228f52f4d' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/helpers.php',
);
// 然后通過foreach循環(huán)遍歷,require 引入,并 根據(jù) key 標記該文件已經(jīng)引入了
// 最終,返回該 $loader
Laravel 中 類的自動加載器 流程
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關閱讀更多精彩內容
- 一:class類裝載驗證流 1:加載A:裝載類的第一階段,B:取得類的二進制流C:轉為方法區(qū)的數(shù)據(jù)結構(類的相關信...
- 年輕的的浮躁 前幾天看到一個調查報告:有三分之一的應屆生會在工作第一年內跳槽。而在一些流動性比較大的的行業(yè),比如互...