ThinkPHP3.1.3原始碼分析(四) Think.class.php
一開始的ThinkPHP.php 最後一行程式碼 就是 Think::start();
呼叫了 Think.class.php 的 start()方法
static public function start() {
// 設定錯誤和異常處理
register_shutdown_function(array('Think','fatalError'));
set_error_handler(array('Think','appError'));
set_exception_handler(array('Think','appException'));
// 註冊AUTOLOAD方法
spl_autoload_register(array('Think', 'autoload'));
//[RUNTIME]
Think::buildApp(); // 預編譯專案
//[/RUNTIME]
// 執行應用
App::run();
return ;
}
這個類最重要的是三部分
1、註冊錯誤、異常的處理方法
register_shutdown_function、set_error_handler、set_exception_handler
2、自動載入
if(substr($class,-8)=='Behavior') { // 載入行為
if(require_array(array(
CORE_PATH.'Behavior/'.$file,
EXTEND_PATH.'Behavior/'.$file,
LIB_PATH.'Behavior/'.$file,
$libPath.'Behavior/'.$file),true)
|| (defined('MODE_NAME') && require_cache(MODE_PATH.ucwords(MODE_NAME).'/Behavior/'.$file))) {
return ;
}
}
節選程式碼,主要的寫法 就是 根據類名的字尾 如 abcBehavior 這搜尋預設Behavior的資料夾裡 有沒有對應的類檔案找到了 就return
沒有找到,則
// 根據自動載入路徑設定進行嘗試搜尋
$paths = explode(',',C('APP_AUTOLOAD_PATH'));
foreach ($paths as $path){
if(import($path.'.'.$class))
// 如果載入類成功則返回
return ;
}
3、編譯專案
其實即使將 runtime.php 流程中定義的常量和應用的檔案 都包含在了一個檔案中 ~runtime.php
這樣可以加快執行速度,減少io開銷
相關文章
- ThinkPHP3.1.3原始碼分析(一) 入口檔案分析PHP原始碼
- ThinkPHP3.1.3原始碼分析(五) App.class.phpPHP原始碼APP
- ThinkPHP3.1.3原始碼分析(三) common.phpPHP原始碼
- ThinkPHP3.1.3原始碼分析(二) runtime.phpPHP原始碼
- preact原始碼分析(四)React原始碼
- OkHttpClient原始碼分析(四)—— CacheInterceptorHTTPclient原始碼
- Netty原始碼分析(四):EventLoopGroupNetty原始碼OOP
- JDK原始碼分析(四)——LinkedHashMapJDK原始碼HashMap
- Vue原始碼分析系列四:Virtual DOMVue原始碼
- Flutter Dio原始碼分析(四)--封裝Flutter原始碼封裝
- TeamTalk原始碼分析(四) —— 伺服器端db_proxy_server原始碼分析原始碼伺服器Server
- mybaits原始碼分析--日誌模組(四)AI原始碼
- beego cache模組原始碼分析筆記四Go原始碼筆記
- OkHttp 3.7原始碼分析(四)——快取策略HTTP原始碼快取
- Android 8.0 原始碼分析 (四) Activity 啟動Android原始碼
- Shading – jdbc 原始碼分析(四) – sql 路由JDBC原始碼SQL路由
- redux原始碼分析之四:compose函式Redux原始碼函式
- JVM 原始碼分析(四):深入理解 park / unparkJVM原始碼
- OkHttp3.7原始碼分析(四)——快取策略HTTP原始碼快取
- 【JUC】JDK1.8原始碼分析之CyclicBarrier(四)JDK原始碼
- JUnit原始碼分析(四)——從Decorator模式說起原始碼模式
- Spring原始碼分析(四)SpringMVC初始化原始碼SpringMVC
- Zookeeper原始碼分析(四) —– 叢集模式(replicated)執行原始碼模式
- Linux核心原始碼分析之setup_arch (四)Linux原始碼
- Zookeeper原始碼分析(四) ----- 叢集模式(replicated)執行原始碼模式
- 【Zookeeper】原始碼分析之伺服器(四)之FollowerZooKeeperServer原始碼伺服器Server
- MPTCP 原始碼分析(四) 傳送和接收資料TCP原始碼
- Retrofit原始碼分析三 原始碼分析原始碼
- EventBus原始碼分析(四):執行緒模型分析(2.4版本)原始碼執行緒模型
- Android主流三方庫原始碼分析(四、深入理解GreenDao原始碼)Android原始碼
- 集合原始碼分析[2]-AbstractList 原始碼分析原始碼
- 集合原始碼分析[1]-Collection 原始碼分析原始碼
- 集合原始碼分析[3]-ArrayList 原始碼分析原始碼
- Guava 原始碼分析之 EventBus 原始碼分析Guava原始碼
- Tomcat原始碼分析 (四)----- Pipeline和ValveTomcat原始碼
- 容器類原始碼解析系列(四)---SparseArray分析(最新版)原始碼
- Giraph原始碼分析(四)—— Master 如何檢查Worker啟動原始碼AST
- RxJava 原始碼分析系列(四) -操作符變換原理RxJava原始碼