91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ThinkPHP源碼分析之核心類文件的加載

發布時間:2020-08-07 17:17:20 來源:網絡 閱讀:837 作者:小海哥2010 欄目:web開發

研究了下TP的加載機制,以下是我的一些總結:

1.首先由應用入口文件index.php引入TP入口文件ThinkPHP.php

2.ThinkPHP.php里主要是定義一些系統常量,URL模式定義,系統信息等,然后加載核心類文件Think.class.php,這個類里定義了start方法,這個方法是系統加載的核心,ThinkPHP的核心函數和類文件加載,配置文件加載,字段映射加載,行為擴展加載,運行時日志等的生成,模塊目錄的生成等都在這個方法里有調用

3.start方法一開始定義注冊了自動加載方法,錯誤和異常處理的方法

// 注冊AUTOLOAD方法
spl_autoload_register('Think\Think::autoload'); 
// 設定錯誤和異常處理
register_shutdown_function('Think\Think::fatalError');
set_error_handler('Think\Think::appError');
set_exception_handler('Think\Think::appException');


然后是初始化文件的存儲方式

// 初始化文件存儲方式

Storage::connect(STORAGE_TYPE);這里TP里定義了本地存儲和sae環境下的存儲類


接著是核心類文件等的加載,TP里根據APP_MODEL判斷php的應用模式,根據不同的模式加載對應的核心文件,默認是common模式,如果是api或sae模式,則加載Library/Model下對應的核心文件,比如common.php,這里定義了系統要加載的核心配置文件,核心函數,核心類,map映射,行為擴展方法等。也就是說TP通過在對應的模式文件下提前定義好要加載的核心配置文件等的路徑信息,然后循環進行加載。

// 讀取應用模式
$mode = include is_file(CONF_PATH.'core.php')?CONF_PATH.'core.php':MODE_PATH.APP_MODE.'.php';//這里判斷應用模式,$model是一個數組,定義了配置文件,核心類文件等的路徑
// 加載核心文件
foreach ($mode['core'] as $file){
if(is_file($file)) {
include $file;
if(!APP_DEBUG) $content .= compile($file);//這里表示運行模式下將引入的核心類文件內容保存到~runtime.php文件里,這樣后面直接引入~runtime.php文件
}
}
// 加載應用模式配置文件
foreach ($mode['config'] as $key=>$file){
is_numeric($key)?C(load_config($file)):C($key,load_config($file));
}
// 讀取當前應用模式對應的配置文件
if('common' != APP_MODE && is_file(CONF_PATH.'config_'.APP_MODE.CONF_EXT))
C(load_config(CONF_PATH.'config_'.APP_MODE.CONF_EXT)); 
// 加載模式別名定義
if(isset($mode['alias'])){
self::addMap(is_array($mode['alias'])?$mode['alias']:include $mode['alias']);
}
// 加載應用別名定義文件
if(is_file(CONF_PATH.'alias.php'))
self::addMap(include CONF_PATH.'alias.php');
// 加載模式行為定義
if(isset($mode['tags'])) {
Hook::import(is_array($mode['tags'])?$mode['tags']:include $mode['tags']);
}
// 加載應用行為定義
if(is_file(CONF_PATH.'tags.php'))
// 允許應用增加開發模式配置定義
Hook::import(include CONF_PATH.'tags.php');


4.調試模式下和非調試模式下的加載

這里非調試模式下,在Runtime目錄下會有一個~runtime.php的文件,打開會發現這個是經過編譯后的源碼文件,里面包含核心配置文件,核心類,map映射等的源碼。也就是說在運行模式下,TP會把加載的核心配置文件,核心類等的內容保存到這個文件里,這樣每次直接調用~runtime.php文件相當于把核心類等直接引入過來,加快了程序運行的速度。




向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

滕州市| 正定县| 灵台县| 甘泉县| 江阴市| 鄂托克前旗| 鄂尔多斯市| 溧阳市| 维西| 吉木萨尔县| 肃北| 德阳市| 巴塘县| 虎林市| 西宁市| 和静县| 平顶山市| 平顺县| 美姑县| 乌海市| 温宿县| 内乡县| 贡嘎县| 吕梁市| 鞍山市| 石家庄市| 湖口县| 丰城市| 湘潭市| 恩平市| 台山市| 沁阳市| 湖南省| 仪陇县| 枣阳市| 德保县| 冷水江市| 应城市| 调兵山市| 多伦县| 定结县|